【发布时间】:2010-11-03 12:11:42
【问题描述】:
我有一个查询,UNION 的两个数据集有些相似,但它们都有一些列在另一个中不存在(即,这些列在结果 UNION 中具有 NULL 值。)
问题是,我需要 ORDER 使用仅存在于一组或另一组中的那些列来生成结果数据,以便以对软件端友好的格式获取数据。
例如:Table1 有字段ID, Cat, Price。 Table2 具有字段 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
ORDER BY 是我卡住的地方。数据如下所示:
100 Balls 1.53
200 Bubbles 1.24
100 RedBall 101RB
100 BlueBall 102BB
200 RedWand 201RW
200 BlueWand 202BW
...但我希望它看起来像这样:
100 Balls 1.53
100 RedBall 101RB
100 BlueBall 102BB
200 Bubbles 1.24
200 RedWand 201RW
200 BlueWand 202BW
我希望这可以在 T-SQL 中完成。
【问题讨论】:
-
id 没有将您的 T2 产品链接到 T1 产品吗?如果不是,你怎么知道 RedWand 和 BlueWand 是在 Bubbles 之后直接出现的?
-
他在问题中说:“Table2有字段ID(和Table1一样)”
-
感谢大家的所有回答;这只是我的第一个问题,但这似乎已经是一个很棒的社区。此外,对于那些批评我的问题所暗示的“架构”的人——请注意我在接受的答案中上面和下面所说的话:这是一个愚蠢的例子!我的问题中的“表”实际上代表了两个非常复杂的 SELECT 查询,它们涉及多个表和子查询,以及聚合和计算字段。再次感谢!
标签: sql sql-server tsql join union