首页 > 解决方案 > 从不同的选择中添加额外的行

问题描述

我正在尝试添加不同的数据以添加为额外的行,这基本上将成为“标题”(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 排序。

标签: mysql

解决方案


对结果使用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,则可以itemORDER BY子句中使用它来代替或 with。


推荐阅读