繁体   English   中英

SQL-ORDER BY在子查询中有效,但在完整查询中失败

[英]SQL - ORDER BY Works in Sub-query, But Fails in Full Query

我正在尝试建立一个动态查询,以填充动态几个月内的平均付款。 我有一个有效的查询,但是它提供了数月的故障。

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

完整归位查询

可以看出,几个月是乱序的。

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

在此处输入图片说明

命令很好。

这是怎么回事? 有什么想法吗?

提前感谢!

(希望这些图像能按我的意愿出来)

在外部选择中,您需要指定ORDER BY以保证顺序。 当前,您仅订购派生表,而不订购最终查询。

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

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

我认为,如果您仅需要连接文本',' + + 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

另外...我必须重新输入屏幕快照中的整个文本。 对某些人来说并不重要,但这是我们偏爱文本而不是屏幕截图的原因之一。

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

我以为ORDER BY必须使用字段名,而且由于没有字段名,因此我不知道如何将其放在其中。 我尝试使用序数1,但不幸的是,这仅给了我串联列表中的最终值。

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

但是,这回答了我遇到的问题。 我认为可以解决以上问题的答案引起了一个问题,但我没有发现。 我正在设法解决这个问题。

感谢所有做出回应的人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM