SQL Server - 查询一个奇怪的表

标签 sql sql-server postgresql sql-server-2008

我有一个名为 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/

相关文章:

sql - 如何删除 '2002' 和 '2006' 之间的特定键?

Android cursor.getColumnNames() 不包含新添加的列

sql-server - ssis 中的意外终止错误

postgresql - 使用 www-data 和 --host 参数访问 Postgres

MySQL:将 SELECT 保存到变量

java - Oracle Java 存储函数 - ORA-00932 : inconsistent datatypes

c# - 将文本文件中的数据插入表 SQL Server

c# - 在 C# 中访问 SQL Server 存储函数的结果

postgresql - 在 PL/pgSQL 中是否可以将字符串作为表达式而不是语句来求值?

PostgreSQL:依赖于给定表的 View /表规则列表