我尝试设置动态查询,以便在动态的几个月内填充平均付款。我有一个有效的查询,但它提供了无序的月份。
我将月份分配给变量@columns,并在主查询中使用它来确定PIVOT命令的字段。以下是变量的设置方法;
可以看出,这些月份已经出现故障。
但是,如果我只运行子查询;
订单很好。
发生了什么?有什么想法吗?
提前Thanx!
(希望图像按照我的要求出现)
答案 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给所有回复的人!