mysql - 从不同的选择中添加额外的行
问题描述
我正在尝试添加不同的数据以添加为额外的行,这基本上将成为“标题”(hd)行......
gn | hd | item*
A | No | Widget One
A | No | Widget Two
A | No | Widget Three
B | No | Widget One
B | No | Widget Two
B | No | Widget Three
C | No | Widget One
C | No | Widget Two
C | No | Widget Three
转换成...
gn | hd | item
A | Yes | *NULL*
A | No | Widget One
A | No | Widget Two
A | No | Widget Three
B | Yes | *NULL*
B | No | Widget One
B | No | Widget Two
B | No | Widget Three
C | Yes | *NULL*
C | No | Widget One
C | No | Widget Two
C | No | Widget Three
这需要通过不同数量的不同组名(gn)和不同数量的项目(it)来完成
我猜我需要先按 DESC 排序,添加额外的行,然后按 ASC 排序。
解决方案
对结果使用UNION ALL
条件排序:
SELECT DISTINCT gn, 'Yes' hd, null item
FROM tablename
UNION ALL
SELECT gn, hd, item
FROM tablename
ORDER BY gn, item IS NULL DESC, item
请参阅演示。
结果:
gn | 高清 | 物品 |
---|---|---|
一个 | 是的 | 无效的 |
一个 | 不 | 小部件一 |
一个 | 不 | 小部件三 |
一个 | 不 | 小部件二 |
乙 | 是的 | 无效的 |
乙 | 不 | 小部件一 |
乙 | 不 | 小部件三 |
乙 | 不 | 小部件二 |
C | 是的 | 无效的 |
C | 不 | 小部件一 |
C | 不 | 小部件三 |
C | 不 | 小部件二 |
请注意,列中的顺序item
是按字母顺序排列的,因为它是一VARCHAR
列,所以'Widget Two'
放在 之后'Widget Three'
。
如果您的表中有主键,例如id
,则可以item
在ORDER BY
子句中使用它来代替或 with。