用 Sql Server 中的列数据替换行

Posted

技术标签:

【中文标题】用 Sql Server 中的列数据替换行【英文标题】:Replace row with Column Data in Sql Server 【发布时间】:2020-04-22 12:00:41 【问题描述】:

我有一个包含一些数据的表,我试图用行替换列。

    SELECT Handset_UID, [IMEI_NO_1] AS [IMEI #1],[IMEI_NO_2] AS [IMEI #2],
    Isnull(Convert(varchar,Mfg_Date,106),'Not Found') as [Mfg. Date]        
    FROM  stock.Handset a
    join Stock.Model b
    on a.Model_ID = b.Model_ID
    JOIN Stock.Brand C
    ON A.Brand_ID = C.Brand_ID
    where a.Handset_UID = 'GFI13508637275434'

上面的查询给了我一个单行数据的结果。

但我想要以下格式的结果

我尝试过使用派生列的枢轴运算符,但在实施过程中感到困惑。

请帮助获取正确的查询。

【问题讨论】:

【参考方案1】:

假设您正在运行 SQL Server,正如语法所示,您可以使用 cross apply 进行反透视:

select x.col, x.val
from stock.handset h
inner join stock.model m on h.model_id = m.model_id
inner join stock.brand b on on h.brand_id = b.brand_id
cross apply (values
    ('handset_uid', handset_uid),
    ('IMEI #1', imei_no_1),
    ('IMEI #2', imei_no_2),
    ('Mfg.Date', convert(varchar, Mfg_Date, 106), 'Not Found')
) x(col, val)
where h.handset_uid = 'gfi13508637275434'

旁注:

有意义的表别名使查询更易于读写

您的查询有许多列不符合它们所属表的别名,这使您的查询对底层结构相当不清楚;我强烈建议您限定查询中的所有列

【讨论】:

以上是关于用 Sql Server 中的列数据替换行的主要内容,如果未能解决你的问题,请参考以下文章

基于列值向sql中的列添加行值

将表中的一列替换为不同表中的列并选择 *

SQL,更新特定行中的列,而不是所有行

sql怎么把一个表的一列替换到对应的另一个表中对应的列?

在 SQL Server Management Studio 中更改 SQL Server 数据库中的列属性

怎么在SQL SERVER 2008数据库中,将某一列字段中的某个值替换为其他的值