如何在SQL Server中将两行合并为一行

时间:2015-12-29 06:28:22

标签: sql sql-server

我的SQL查询输出是这样的,我需要将它放在一行中。

 iProductM  iProductO   UnitCostM   UnitCostO
    7065    NULL         30.67      NULL
    NULL    7065         NULL       29.78

必需的输出:

iProductM   iProductO   UnitCostM   UnitCostO
        7065     7065        30.67      29.78

我的查询如下:

SELECT 
    coalesce(iProductM, iProductO) as P,
    coalesce(UnitCostM, UnitCostO) as U  
FROM 
    ViewForCostAll 
WHERE
    iProductO = 7065 OR iProductM = 7065

但我的输出仍然分为两行:

P       U
7065    30.67
7065    29.78

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

SELECT DISTINCT
    coalesce(iProductM, iProductO) as iProductM,
    coalesce(iProductO, iProductM) as iProductM,
    coalesce(UnitCostM, UnitCostO) as UnitCostM,  
    coalesce(UnitCostO, UnitCostM) as UnitCostO  
FROM 
    ViewForCostAll 
WHERE
    iProductO = 7065 OR iProductM = 7065

如果另一列为null,则可以使用一列,然后使用DISTICNT删除重复项

答案 1 :(得分:0)

联接是您组合行的方法。连接完成后,您可以比较(内部结果)行中的值,并输出所选结果。此查询仅适用于您询问的2行。如果您的数据有更多行,让我们看看它们并进行适合您实际数据的查询。

SELECT 
    isNull(V1.iProductM, V2.iProductM) as iProductM,
    isNull(V1.iProductO, V2.iProductO) as iProductO,
    isNull(V1.UnitCostM, V2.UnitCostM) as UnitCostM,  
    isNull(V1.UnitCostO, V2.UnitCostO) as UnitCostO  
FROM 
   ViewForCostAll V1
LEFT JOIN
   ViewforCostAll V2 on (V2.iProductM is null)
WHERE
    V1.iProductO = 7065