SQL On On

时间:2016-06-16 18:46:39

标签: sql join

我想将成对的行组合成两列。 目前,我可以将它们组合成两列,但我想删除左侧列为“A”的实例,然后“A”也不会出现在右侧。基本上我有两倍的行应该。

另外,我读到了关于使用数据透视表,但无法使用它。

Select t1.ID, concat(t1.Notes,' ' + t2.Notes) as Notes, t1.Flag, t2.ID as Old_ID
From mytable as t1
Left outer Join mytable as t2
    On ( t1.Flag = t2.Flag and t1.ID != t2.ID)
where t1.Notes is not null

数据:

ID |   NOTES | Flag
A       YES     1
B       YES     2
C       YES     3
D       YES     4

当前输出:

ID |   NOTES   | Flag | Old_ID
A     YES YES      1     B
C     YES YES      3     D
B     YES YES      2     A
D     YES YES      4     C

预期产出:

ID |   NOTES   | Flag | Old_ID
A     YES YES     1      C
B     YES YES     2      D

2 个答案:

答案 0 :(得分:3)

添加到您的where子句

buffer

答案 1 :(得分:0)

无法确定哪个是“老”'条目

A     YES YES      1     B  - which takes precidence?
B     YES YES      2     A 

您必须定义一些标准,通过该标准将一个条目优先于另一个条目。

SELECT
    t1.ID,
    concat(t1.Notes,' ' + t2.Notes) AS Notes,
    t1.Flag,
    t2.ID AS Old_ID
FROM mytable AS t1
LEFT OUTER JOIN mytable AS t2
    ON ( t1.Flag = t2.Flag AND t1.ID != t2.ID)
WHERE
    t1.Notes IS NOT NULL
    AND t1.id NOT IN (
        SELECT MAX(id) FROM mytable GROUP BY Flag
    )