Nat*_*teJ 15 sql t-sql sql-server union join
我有一个查询是UNION两个有点相似的数据集,但它们都有一些列不存在于另一个中(即,列中的结果中有NULL值UNION).
问题是,我需要ORDER使用仅存在于一个或另一个集合中的那些列来生成数据,以便以软件方面的友好格式获取数据.
例如:Table1有字段ID, Cat, Price.表2有字段ID, Name, Abbrv.该ID字段在两个表之间是通用的.
我的查询看起来像这样:
SELECT t1.ID, t1.Cat, t1.Price, NULL as Name, NULL as Abbrv FROM t1
UNION
SELECT t2.ID, NULL as Cat, NULL as Price, t2.Name, t2.Abbrv FROM t2
ORDER BY Price DESC, Abbrv ASC
Run Code Online (Sandbox Code Playgroud)
这ORDER BY就是我被困住的地方.数据如下所示:
100 Balls 1.53
200 Bubbles 1.24
100 RedBall 101RB
100 BlueBall 102BB
200 RedWand 201RW
200 BlueWand 202BW
Run Code Online (Sandbox Code Playgroud)
...但我希望它看起来像这样:
100 Balls 1.53
100 RedBall 101RB
100 BlueBall 102BB
200 Bubbles 1.24
200 RedWand 201RW
200 BlueWand 202BW
Run Code Online (Sandbox Code Playgroud)
我希望这可以在T-SQL中完成.
Jef*_*ffO 28
Select ID, Cat, Price, Name, Abbrv
From
(SELECT t1.ID, t1.Cat, t1.Price, t1.Price AS SortPrice, NULL as Name, NULL as Abbrv
FROM t1
UNION
SELECT t2.ID, NULL as Cat, NULL as Price, t1.Price as SortPrice, t2.Name, t2.Abbrv
FROM t2
inner join t1 on t2.id = t1.id
) t3
ORDER BY SortPrice DESC, Abbrv ASC
Run Code Online (Sandbox Code Playgroud)
不知何故,你必须知道表2中的数据链接到表1并共享价格.由于abbrv中的Null将首先出现,因此无需创建SortAbbrv列.
您应该使用UNION ALL而不是UNION来节省重复检查的成本.
SELECT *
FROM
(
SELECT t1.ID, t1.Cat, t1.Price, NULL as Name, NULL as Abbrv FROM t1
UNION ALL
SELECT t2.ID, NULL as Cat, NULL as Price, t2.Name, t2.Abbrv FROM t2
) as sub
ORDER BY
ID,
CASE WHEN Price is not null THEN 1 ELSE 2 END,
Price DESC,
CASE WHEN Abbrv is not null THEN 1 ELSE 2 END,
Abbrv ASC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29571 次 |
| 最近记录: |