我正在尝试取消数据集中的多个列。这是我的数据。
CREATE TABLE T5 (idnum NUMBER,f1 NUMBER(10,5),f2 NUMBER(10,5),f3 NUMBER(10,5)
,e1 NUMBER(10,5),e2 NUMBER(10,5)
,h1 NUMBER(10,5),h2 NUMBER(10,5));
INSERT INTO T5 (IDNUM,F1,F2,F3,E1,E2,H1,H2)
VALUES (1,'10.2004','5.009','7.330','9.008','8.003','.99383','1.43243');
INSERT INTO T5 (IDNUM,F1,F2,F3,E1,E2,H1,H2
VALUES (2,'4.2004','6.009','9.330','4.7008','4.60333','1.993','3.3243');
INSERT INTO T5 (IDNUM,F1,F2,F3,E1,E2,H1,H2)
VALUES (3,'10.2040','52.6009','67.330','9.5008','8.003','.99383','1.43243');
INSERT INTO T5 (IDNUM,F1,F2,F3,E1,E2,H1,H2)
VALUES (4,'9.20704','45.009','17.330','29.008','5.003','3.9583','1.243');
COMMIT;
select * from t5;
IDNUM F1 F2 F3 E1 E2 H1 H2
1 10.2004 5.009 7.33 9.008 8.003 0.99383 1.43243
2 4.2004 6.009 9.33 4.7008 4.60333 1.993 3.3243
3 10.204 52.6009 67.33 9.5008 8.003 0.99383 1.43243
4 9.20704 45.009 17.33 29.008 5.003 3.9583 1.243
我像这样坚定不移…
select *
from (select IDNUM,F1,F2,F3,E1,E2,H1,H2,
null as E3,null as H3
from T5)
UnPivot((F,E,H) for sk in ((F1,E1,H1) as 1,
(F2,E2,H2) as 2,
(F3,E3,H3) as 3))
order by IDNUM,SK;
IDNUM SK F E H
----- -- ------- ------- -------
1 1 10.2004 9.008 .99383
1 2 5.009 8.003 1.43243
1 3 7.33 null null
2 1 4.2004 4.7008 1.993
2 2 6.009 4.60333 3.3243
2 3 9.33 null null
3 1 10.204 9.5008 .99383
3 2 52.6009 8.003 1.43243
3 3 67.33 null null
4 1 9.20704 29.008 3.9583
4 2 45.009 5.003 1.243
4 3 17.33 null null
但是我真正需要的是如下…
IDNUM SK F E H F_COL_NAME
----- -- ------- ------- ------- ----------
1 1 10.2004 9.008 .99383 F1
1 2 5.009 8.003 1.43243 F2
1 3 7.33 null null F3
2 1 4.2004 4.7008 1.993 F1
2 2 6.009 4.60333 3.3243 F2
2 3 9.33 null null F3
3 1 10.204 9.5008 .99383 F1
3 2 52.6009 8.003 1.43243 F2
3 3 67.33 null null F3
4 1 9.20704 29.008 3.9583 F1
4 2 45.009 5.003 1.243 F2
4 3 17.33 null null F3
我怎样才能做到这一点?
只是select idnum, sk, f, e, h, 'F'||SK as col_name
…您需要指定所有列而不是星号。
像这样http://sqlfiddle.com/#!4/12446/21
问题内容: 我有一张有栏的桌子。数据就像 我想像下面这样安排它: 使用unpivot,我能够正确获取Name,Marks,但无法将源表中的列名获取到所需结果集中的列。 我怎样才能做到这一点? 到目前为止,我已经达到以下查询(获取名称,商标) 问题答案: 您的查询非常接近。您应该能够使用以下内容,其中包括最终选择列表中的内容: 参见带有演示的SQL Fiddle
问题内容: 我试图取消有多个行和列的表。每行需要引出到具有特定列的2行,并且列名需要重命名,并且需要根据所选列添加新列! 我包括示例数据之前和之后以及用于设置数据的脚本。 我已经尝试过了,但是我无法通过第二列,而且我不确定如何添加带有特定文本的新列(可能是动态sql,但如果可能的话,尽量避免这种情况) 这是我尝试的开始,我们将不胜感激。 问题答案: 你只是保持不懈 并加入col列以滤除不匹配项
我有一个表,其中有列。数据就像
问题内容: 我将重点放在关键值对上,以便与另一台服务器上的值进行比较以进行一致性测试。我遇到了一个返回错误的问题。 Msg 8167,第16级,状态1,第51行 列“类型”的类型与UNPIVOT列表中指定的其他列的类型冲突。 询问: 为什么这样不喜欢,,??? 我也尝试过 问题答案: 这实际上是整理问题。我可以通过更改以下行来解决: 特定的问题是整理为,而您提到的其他3列则整理为(至少,在我的机器
问题内容: 我有一个产生以下结果集的视图: 我需要将其转换为: 我只使用交叉表使用列,就知道该怎么做。如何在目标结果集中使用和产生新列?如果我只是在查询中添加列,它会抱怨“无效的源数据SQL语句”。 我正在使用PostgreSQL 9.3.6。 问题答案: 一种方法是使用复合类型: 或者,为临时使用(在会话期间注册类型): 然后,根据需要运行交叉表并分解复合类型: 所有括号都是 必需的 ! 基础知
(注意这不是按字母顺序,蓝莓排在狒狒之前) 当然,只要有一个列表不是空的,我就可以用一个计数器在“superlist”中循环,一个接一个地向resultslist中添加项目: 但最好使用一些优化的LINQ函数来实现这一点。我一直在研究Zip、GroupBy和Aggregate,但无法使它们工作。 那么:有没有一个漂亮的LINQ函数,或者多个函数的组合,可以把它变成漂亮的代码,或者我应该坚持(也许优