2017-04-10 76 views
0

我試圖將我的60多個SQL查詢合併到一個查詢中,並通過BCP將結果導出到一個單一的.CSV文件中。結合大量的SQL查詢和通過bcp查詢

我設法將它們與UNION ALL結合,運行1個BCP命令,與2個查詢工作,但不能與> 40 :-)

我得到一個錯誤:

Query hints exceed maximum command buffer size of 8191 bytes (24324 bytes input)

的查詢是幾乎相同,最後只有Location每次都是不同的。

SELECT 
    ISNULL(REPLACE(LEFT(SUM([Sales Amount (Actual)]) * 1.21, LEN(SUM([Sales Amount (Actual)])) -18),'.', ','),0) Result 
FROM 
    _DBHERE_ 
WHERE 
    ([Item] = 1) 
    AND ([Date] = CAST(GETDATE() AS DATE)) 
    AND ([Location] = '1') 

SELECT 
    ISNULL(REPLACE(LEFT(SUM([Sales Amount (Actual)]) * 1.21, LEN(SUM([Sales Amount (Actual)])) -18),'.', ','),0) Result 
FROM 
    _DBHERE_ 
WHERE 
    ([Item] = 1) 
    AND ([Date] = CAST(GETDATE() AS DATE)) 
    AND ([Location] = '2') 
+2

難道你不能用一個查詢和連接到一個Location *表*嗎? –

+2

爲什麼您需要分別指定每個查詢,如果它只是位置發生變化?當然,你可以用一個IN語句替換一個查詢? – Simon

+0

@Simon對不起,我從來沒有聽說過IN,但我只是試過它並且工作,唯一的問題是現在它將一行中的值相加,而不是創建單獨的行。這當然是因爲查詢中的「SUM」 – Bldjef

回答

1

試試這個

SELECT 
[Location] 
, ISNULL(REPLACE(LEFT(SUM([Sales Amount (Actual)]) * 1.21, LEN(SUM([Sales 
    Amount (Actual)])) -18),'.', ','),0) Result 
FROM 
    _DBHERE_ 
WHERE [Item] = 1 
AND [Date] = CAST(GETDATE() AS DATE) 
AND [Location] IN ('1', '2', ......) -- replace ... with comma separated list of required values 
GROUP BY [Location] 
; 

你只需要 「和[定位]在」 行,如果您被限制[位置]值。如果你想要所有地點,這條線是沒有必要的。或者,正如評論你可以加入一個位置表和使用任何標準,你必須限制位置

更新基於評論從OP 假設你有一個[位置]表,你可以這樣做:

SELECT 
L.[Location] 
, ISNULL(REPLACE(LEFT(SUM(S.[Sales Amount (Actual)]) * 1.21, LEN(SUM(S.[Sales 
    Amount (Actual)])) -18),'.', ','),0) Result 
FROM [Location] L 
LEFT OUTER JOIN [SalesData] S 
ON S.[Location] = L.[Location] 
AND S.[Item] = 1 
AND S.[Date] = CAST(GETDATE() AS DATE) 
WHERE L.[Location] IN ('1', '2', ......) -- replace ... with comma separated list of required values 
GROUP BY L.[Location] 
; 
+0

謝謝,這完美的作品! – Bldjef

+0

實際上,結果並不是我期待的:) 如果該位置的結果爲空,我應該也會收到'0',而不會顯示任何內容並跳過該行。 – Bldjef

+0

你有單獨的位置表嗎? – RT72