簡體   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