我有一个名为 products 的表,
SELECT * FROM products;
结果的结构,这就是让它变得有趣的原因:
PRODUCT_1 | PRODUCT_2 | PRODUCT_3 | PRODUCT_4 | PRODUCT_ 5
$ 10.00 | $ 20.00 | $ 25.00 | $ 30.00 | $ 35.00
我知道我知道,到底是谁设计了这样一张 table ? 但不幸的是,这就是我所拥有的。我需要做的是通过 C# 应用程序将此表从 SQL Server 复制到 PostgreSQL。在 PostgreSQL 中,我有一个新的表结构,但我不知道如何进行查询才能得到这样的结构:
Product | Cost
--------------------
Product_1 | $ 10.00
Product_2 | $ 20.00
Product_3 | $ 25.00
Product_4 | $ 30.00
Product_5 | $ 35.00
最佳答案
示例
Select B.*
From products A
Cross Apply (
values ('PRODUCT_1',[PRODUCT_1])
,('PRODUCT_2',[PRODUCT_2])
,('PRODUCT_3',[PRODUCT_3])
,('PRODUCT_4',[PRODUCT_4])
,('PRODUCT_5',[PRODUCT_5])
) B (Product,Cost)
返回
Product Cost
PRODUCT_1 10.0000
PRODUCT_2 20.0000
PRODUCT_3 25.0000
PRODUCT_4 30.0000
PRODUCT_5 35.0000
编辑 - 对于无需指定字段和字段名称的动态方法
Select Product = C.Item
,Cost = C.Value
From products A
Cross Apply ( Select XMLData=convert(xml,(Select A.* for XML Raw)) ) B
Cross Apply (
Select Item = attr.value('local-name(.)','varchar(100)')
,Value = attr.value('.','varchar(max)')
From B.XMLData.nodes('/row') as A(r)
Cross Apply A.r.nodes('./@*') AS B(attr)
Where attr.value('local-name(.)','varchar(100)') not in ('FieldsTo','Exclude')
) C
关于SQL Server - 查询一个奇怪的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44191984/