|
我有一个查询,它UNION这是两个有点相似的数据集,但它们都有其他列中不存在的列(即结果中的列)NULL值UNION。); d1 Y7 v0 M5 A7 e" t; a
问题是,我需要ORDER使用只存在于一个或另一个集合中的列来生成数据,以便以友好的格式为软件端获取数据。
8 {7 X0 l/ s4 |* x+ _0 T例如: Table1 具有字段ID,Cat,Price。表2 具有字段ID,Name,Abbrv。该ID两表之间的字段是公共的。3 e' r* v0 K/ S
我的查询看起来像这样:9 s4 o2 F8 c1 U; {2 Z) ^
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这ORDER BY这是我被困住的地方。数据如下:
0 H- v5 Q. N1 E6 E2 C100 Balls 1.533 2000 20000 Bubbles 1.2444 RedBall 101RB BlueBall 102BB 200 RedWand 201RW 200 BlueWand 202BW…但我希望它看起来像这样:8 _- P5 B$ Q9 g; p9 J0 C
100 Balls 1.533353 RedBall 101RB BlueBall 102BB 200 Bubbles 1.24 200 RedWand 201RW 200 BlueWand 202BW我希望这是可以的T-SQL中完成。
; u6 Z" Y5 H, N2 {
# j. v. k% X% X2 M4 F1 s/ a 解决方案: / H( _1 @8 F) R0 m9 p
Select ID,Cat,Price,Name,AbbrvFrom(SELECT t1.ID,t1.Cat,t1.Price,t1.Price AS SortPrice,NULL as Name,NULL as Abbrv FROM t1UNIONSELECT 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) t3ORDER BY SortPrice DESC,Abbrv ASC您必须知道表2中的数据已链接到表1并以某种方式共享价格。abbrv中的Null它将排在前面,因此无需创建SortAbbrv列。 |
|