2016-04-26 22 views
0

CROSS JOIN関数を使用してビューを作成しています。私が見つけたコードは以下の通りです。このサンプルコードでSQL Server Cross Join

SELECT tbl.* 
    ,y.GOAL_VERSION_NO 
FROM EVALGOAL_GROUP_EMP AS tbl 
CROSS JOIN (SELECT TOP (SELECT MAX(GOAL_VERSION_NO) FROM GOAL) * FROM(VALUES(1),(2),(3),(4),(5) /*add the max count here*/) AS x(GOAL_VERSION_NO)) AS y 

SELECT MAX(GOAL_VERSION_NO) FROM GOALの出力は、1~1000であることができると言うあたり、任意の値とすることができます。しかし、私は自分のコードで行ったように、CROSS JOINの値をVALUES (1),(2),(3)というように挿入することだけを学びました。ここで無制限のクロスジョイント値を入力できる方法はありますか(無限にすると最大1000を意味し、上記のようにハードコードするのは難しく、時には1000を超えることもあります)。
私を助けてください。ありがとうございました。

+0

'NUMBERのTABLE'を使用しています。 – Squirrel

答えて

3

あなたは目標値までの数字のシーケンスを生成するためにTally Tableを使用することができます。

DECLARE @Range AS INT = 1000; 

WITH E1(N) AS(-- 10^1 = 10 rows 
    SELECT 1 FROM(VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))t(N) 
), 
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), -- 10^2 = 100 rows 
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), -- 10^4 = 10,000 rows 
CteTally(GOAL_VERSION_NO) AS(
    SELECT TOP(@Range) ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) 
    FROM E4 
) 
SELECT 
    tbl.*, 
    y.GOAL_VERSION_NO 
FROM EVALGOAL_GROUP_EMP AS tbl 
CROSS JOIN CteTally y 

Simplified explanation of Tally Table

+0

必要な最大値を持つ番号テーブルを作成するこれは私の問題を解決しました。 – jayz

+0

@jayzありがとうございます。このコードを本番環境で使用する前に、参考資料をお読みください。 –

+0

大丈夫。ありがとうございました。 – jayz