我有一个查询,UNIONs两个有点类似的数据集,但他们都有一些列不存在于另一个 - 即列在结果UNION中有NULL值。 UNION的目的是以软件方面的友好格式获取数据。TSQL ORDER-BY与一个不同的数据集联盟
问题是,我需要使用那些只存在于一个或另一个集合中的列对结果数据进行排序。
例如:表1具有字段ID,Cat,Price。表2具有字段ID(与表1中相同),名称,缩写。
我的查询看起来是这样的:
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--
(道歉,如果这些都很难读 - didn't知道该怎么显示表)
请记住,这是一个非常愚蠢的例子和谚语“使用JOIN!”答案是不适用的(即我已经知道如何加入他们,但这不是我想要的最终结果)。
这很可能是实现这一目标的唯一途径是通过软件处理数据,一旦它来自数据层背 - 如果是这样的话,那么就这样吧。但我希望可以在TSQL中完成。
请不要将您的T2产品链接到T1产品? 如果没有,你怎么知道RedWand&BlueWand在Bubbles之后直接出现? – mundeep 2009-06-17 01:14:20
他在问题中说:“表2有字段ID(与表1相同)” – 2009-06-17 03:11:34
感谢所有人的答案;这只是我的第一个问题,但这已经看起来像一个伟大的社区。另外,对于那些会批评我的问题所暗示的“架构”的人,请注意我在上面和下面所接受的答案中所说的话:这是一个愚蠢的例子!我的问题中的'表'实际上代表了两个非常复杂的SELECT查询,涉及多个表和子查询,包含聚合和计算字段。再次感谢! – NateJ 2009-06-17 16:02:06