2011-07-13 9 views
5

मैं इस तरह बयान (बयान के साथ कि उपयोग) के कई:एसक्यूएल सर्वर: एक संघ में साथ कई SELECT स्टेटमेंट्स कम्बाइन भाग "के साथ"

WITH valDiff AS (SELECT <ComplexClause1> AS v1 FROM [MyTable] WHERE <OtherClause1>) SELECT SUM(CASE WHEN v1 < @MaxVal THEN v1 ELSE @MaxVal END) FROM valDiff 

UNION 

WITH valDiff AS (SELECT <ComplexClauseN> AS v1 FROM [MyTable] WHERE <OtherClauseN>) SELECT SUM(CASE WHEN v1 < @MaxVal THEN v1 ELSE @MaxVal END) FROM valDiff 

मैं उन्हें इतना है कि एक संघ में शामिल करने की जरूरत है परिणाम "एक झुकाव में" वापस आ गया है। उन बयानों को खुद से ठीक काम करते हैं, लेकिन अगर मैं उन दोनों के बीच शब्द "यूनियन" जोड़ने के लिए, जैसे मैं ऊपर से पता चला है, मैं निम्न त्रुटि हो:

Incorrect syntax near the keyword 'UNION'.
Incorrect syntax near the keyword 'with'.
If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon."

क्या मैं गलत कर रहा हूँ?

उत्तर

8

के साथ संघ

;WITH valDiff AS 
(
whatever 
) 
SELECT ... FROM valDiff ... 
UNION ALL 
SELECT ... FROM valDiff ... 

में सभी खंड अवधि प्रत्येक खंड में एक अलग CTE के साथ (इस मामले में के रूप में):

;WITH CTE1 AS 
(
whatever 
) , CTE2 AS 
(
something 
) 
SELECT ... FROM CTE1 ... 
UNION ALL 
SELECT ... FROM CTE2 ... 
1

थोड़ा अपने वाक्य रचना को पुनर्व्यवस्थित करें ताकि सभी सीटीई पहले आते हैं:

WITH valDiff1 AS (SELECT <ComplexClause1> AS v1 FROM [MyTable] WHERE <OtherClause1>), 
    valDiff2 AS (SELECT <ComplexClauseN> AS v1 FROM [MyTable] WHERE <OtherClauseN>) 
SELECT SUM(CASE WHEN v1 < @MaxVal THEN v1 ELSE @MaxVal END) FROM valDiff1 
UNION ALL 
SELECT SUM(CASE WHEN v1 < @MaxVal THEN v1 ELSE @MaxVal END) FROM valDiff2 
संबंधित मुद्दे