2011-06-16 12 views
2

私はこのようなクエリがあります:それは見ることができるようにこのクエリを短縮する方法はありますか?

SELECT Name, 
REPLACE(RTRIM((
       SELECT CAST(Score AS VARCHAR(MAX)) + ' ' 
       FROM 
        (SELECT Name, Score 
        FROM table 
        WHERE 
        ---CONDITIONS--- 
        ) AS InnerTable    
       WHERE (InnerTable.Name = OuterTable.Name) FOR XML PATH (''))),' ',', ') AS Scores 
FROM table AS OuterTable 
WHERE 
---CONDITIONS--- 
GROUP BY Name; 

を、私はInnerTableOuterTableを導出するための条件の同じセットを使用しています。このクエリを短縮する方法はありますか?私はこれを聞いています。逆に、MySQLでキーワードUSINGが見られたため、クエリを一度指定して残りのクエリで別名を使用することができるようになりました。

答えて

3

共通テーブル式(CTE)を作成することができます。それは選択のエイリアシングのためのあなたの最善の策です。残念ながら、どこの条件を2度定義するのを妨げても、あなたのクエリをどのくらいの量で行うかはわかりません。下記をご覧ください。

with temp as 
(
    SELECT Name, Score 
    FROM table 
    WHERE whatever = 'whatever' 
) 

SELECT Name, 
REPLACE(RTRIM((
       SELECT CAST(Score AS VARCHAR(MAX)) + ' ' 
       FROM 
        (SELECT Name, Score 
        FROM temp     ) AS InnerTable    
       WHERE (InnerTable.Name = OuterTable.Name) FOR XML PATH (''))),' ',', ') AS Scores 
FROM temp AS OuterTable 
GROUP BY Name; 
+1

+1ありがとうございます。私はこれが私の必要なものだと思う。それは私のクエリをより読みやすくします。私はタイマーが切れるときこれを答えとして受け入れます。 :) – Legend

関連する問題