从两行合并成一行? (SQL Server)

时间:2018-01-24 02:35:34

标签: sql sql-server database

如果我有代码

SELECT DISTINCT 
    table1.column2, table2.column3, table2.column4 
FROM 
    table1
JOIN
    table2 ON table1.column = table2.column
WHERE 
    table1.column1 IN ('Value1', 'Value2')

这将返回两行相同的数据,除了每一行都有一个特定列不同的值。如何将一个值叠加在一列上,并将其生成一列?

例如,它目前会产生如下结果:

column1       column2        column3
Value1        Value2         Value3
Value1        Value2         Value5

基本上它会创建两行,因为在第3列中,值是不同的,是否有任何方法可以将该值设为5并为其创建一个单独的列到第一行?

这会涉及到旋转吗?或者我怎么能这样做呢?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

您可以根据需要聚合列。它可以是 - MAXMINSUMAVG等。

SELECT  table1.column1, table1.column2, MAX(table2.column3) AS column3
FROM    table1
        INNER JOIN table2 
            ON table1.column = table2.column
WHERE   table1.column1 IN ('Value1', 'Value2')
GROUP   BY table1.column1, table1.column2

答案 1 :(得分:1)

LAG()可以在当前行之前获取该行。所以脚本是这样的:

    select * from(
     SELECT DISTINCT table1.column2, table2.column3, table2.column4,lag(column4) over (order by table1.column2,table2.column3,table2.column4) l
     FROM table1
     JOIN
     table2 on 
     table1.column = table2.column
     WHERE table1.column1 IN ('Value1', 'Value2')
   )t where t.l is not null

答案 2 :(得分:1)

因为column3只有2个值,MIN()和MAX()会给你两个值

SELECT table1.column1, table2.column2, MIN(table2.column3) , MAX(table2.column3)
FROM   table1
JOIN   table2 
ON     table1.column = table2.column
WHERE  table1.column1 IN ('Value1', 'Value2')
GROUP BY table1.column2, table2.column3