Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-ORDER BY在子查询中起作用,但在完全查询中失败_Sql_Sql Order By - Fatal编程技术网

SQL-ORDER BY在子查询中起作用,但在完全查询中失败

SQL-ORDER BY在子查询中起作用,但在完全查询中失败,sql,sql-order-by,Sql,Sql Order By,我正在尝试设置一个动态查询,以填充动态月份内的平均付款。我有一个正在工作的查询,但它提供了不符合顺序的月份 我将月份分配给变量@columns,并在主查询中使用它来确定PIVOT命令的字段。以下是如何设置变量 正如可以看到的那样,几个月是无序的 但是,如果我只运行子查询 命令很好 发生什么事了?有什么想法吗 先走一步 希望这些图像能像我所希望的那样出现在您的外部选择中,您需要指定ORDER BY以保证订单。目前,您只对派生表进行排序,而不是对最终查询进行排序 SELECT @columns +=

我正在尝试设置一个动态查询,以填充动态月份内的平均付款。我有一个正在工作的查询,但它提供了不符合顺序的月份

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

正如可以看到的那样,几个月是无序的

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

命令很好

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

先走一步


希望这些图像能像我所希望的那样出现

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

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

PRINT @columns

我认为,如果您还需要连接文本“,”++QUOTENAMEEff”句点,那么子查询是不必要的。但是你可以不用子查询就可以做到这一点。此外,前100%并不像其他人指出的那样有效,在任何情况下都不需要

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必须使用字段名,但由于没有字段名,我不知道如何将其放入其中。我尝试使用序号1,不幸的是,它只给出了串联列表中的最终值

但是,它似乎可以采取有效期在外部选择;可能是因为它是JOIN中唯一的名称

然而,这回答了我的问题。这个问题是由一个答案引起的,我认为它解决了一个上覆的问题,但我发现它没有。我现在正想弄清楚


感谢所有回应的人

你为什么使用图像?由于许多原因,图像让你很难回答你的问题。你想让别人回答你的问题吗?为什么这么难呢?请在文本中添加代码和示例,而不是图像。将表格和数据作为文本显示,以便理解why@HoganOp是新来的,他可能不知道该怎么办,试着给他一些建议instead@JuanCarlosOropeza-是吗?如果你想知道这个问题到底是怎么回事,选择TOP 100%ORDER BY,用于将SQL优化器复制到实际操作中,即使在视图中也是如此。这是不可靠的,但如果在子查询扩展之后只出现循环联接,它实际上会工作。
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