SQL - ORDER BY在子查询中工作,但在完整查询中失败

时间:2017-11-08 19:47:35

标签: sql sql-order-by

我尝试设置动态查询,以便在动态的几个月内填充平均付款。我有一个有效的查询,但它提供了无序的月份。

我将月份分配给变量@columns,并在主查询中使用它来确定PIVOT命令的字段。以下是变量的设置方法;

Full assigment query

可以看出,这些月份已经出现故障。

但是,如果我只运行子查询;

enter image description here

订单很好。

发生了什么?有什么想法吗?

提前Thanx!

(希望图像按照我的要求出现)

4 个答案:

答案 0 :(得分:1)

在您的外部选择中,您需要指定ORDER BY以保证订单。目前,您只是订购派生表而不是最终查询。

SELECT @columns += ',' + QUOTENAME(Eff_Period)
FROM
  (derived table) AS Raw_Data
ORDER BY Eff_Period

PRINT @columns

答案 1 :(得分:0)

 SELECT @columns == ',' + QUOTENAME (Eff_period)
 FROM ( ... ) as Raw_Data
 ORDER BY Eff_period

答案 2 :(得分:0)

我认为如果您还需要连接文本',' + + QUOTENAME(Eff_Period),则子查询是不必要的。但是你可以在没有子查询的情况下这样做。此外,TOP 100 PERCENT不像其他人指出的那样有效,在任何情况下都不需要。

SELECT @column += ',' + QUOTENAME(Eff_Period)
  FROM Members_Data AS Mbrs
       INNER JOIN Claims_Data AS Clms
        ON Mbrs.Eff_Period = REPLACE(CONVERT(nvarchar(7), Clms.Date_of_Service, 121), '-', '')
 WHERE YEAR(Clms.Date_of_Service) = 2016

GROUP BY Mbrs.Eff_Period
ORDER BY Eff_Period

另外......我不得不从屏幕截图中重新输入整个文本。对某些人来说并不是什么大不了的事,但这是我们更喜欢文字与屏幕截图的原因之一。

答案 3 :(得分:0)

是的,外面的 ORDER BY 就是答案。

我认为 ORDER BY 必须使用字段名称,因为没有,我不知道如何把它放在那里。我尝试使用序号1,不幸的是,它只给了我连接列表中的最终值。

但是,它似乎可以在外部 SELECT 中使用 Eff_Period ;也许是因为它是 JOIN 的唯一名称。

然而,这解决了我遇到的问题。一个问题是由我认为修复了一个覆盖问题的答案引起的,但我发现没有。我此时想要解决这个问题。

Thanx给所有回复的人!