【发布时间】:2019-12-11 13:06:44
【问题描述】:
我有一个名为 SourceTable 的表,其中有 4 个字段。
Properties_title 字段有 3 个值(AAA、BBB、CCC),但也可以有更多。取决于它们中的每一个,NumericValue 字段和Property_item_title 字段都有一个值。根据下表,如果Properties_title 是 AAA 或 CCC,那么 Property_item_title 它有值,如果 Properties_title 是 BBB,那么NumericValue 它有价值。
现在我想旋转它,为每个 W_ID 制作一行,例如 Result Table。
源表:
+--------+------------------+---------------+---------------------+
| W_ID | Properties_title | NumericValue | Property_item_title |
+--------+------------------+---------------+---------------------+
| 102859 | AAA | null | Useless |
| 102859 | BBB | 30000 | null |
| 102859 | CCC | null | Repair |
| 92527 | AAA | null | Use |
| 92527 | BBB | 3250 | null |
+--------+------------------+---------------+---------------------+
结果表:
+-------+-----------+---------+---------+
| W_id | AAA | BBB | CCC |
+-------+-----------+---------+-------- +
|102859 | Useless | 30000 | Repair |
|92527 | Use | 3250 | null |
|... | ... | ... | ... |
+-------+-----------+---------+---------+
列名必须是动态的
我的代码:
CREATE TABLE dbo.SourceTable (W_ID int NOT NULL,
Properties_title varchar(3) NOT NULL,
NumericValue int NULL,
Property_item_title varchar(100) NULL);
INSERT INTO dbo.SourceTable
VALUES (102859,'AAA',NULL,'Useless'),
(102859,'BBB',30000,NULL),
(102859,'CCC',NULL,'Repair'),
(92527,'AAA',NULL,'Use'),
(92527,'BBB',3250,NULL);
SELECT *
FROM dbo.SourceTable;
Here 是一个 dbfiddle。
感谢您的帮助。
【问题讨论】:
-
这能回答你的问题吗? SQL Server dynamic PIVOT query?
-
@panagiotis-kanavos 不完全是,但它是如此接近。
-
为什么不呢,@JavedAbedi?我看不出有什么明显的原因。
-
@larnu 因为我有两个带有值的文件,代码应该识别哪个值是哪个列。
-
这种说法毫无意义。对我来说,这建议重复,看起来它可以与
ISNULL一起使用。
标签: sql sql-server tsql pivot entity-attribute-value