-2
我有兩個選擇查詢用於我的項目中獲取數據並將其顯示在我的網頁中。我想加入他們,這樣我只需要訪問一次數據。但我不知道如何加入它們,因爲其中一個查詢包含組功能。你可以幫幫我嗎?提前致謝。加入兩個查詢
我有兩個選擇查詢用於我的項目中獲取數據並將其顯示在我的網頁中。我想加入他們,這樣我只需要訪問一次數據。但我不知道如何加入它們,因爲其中一個查詢包含組功能。你可以幫幫我嗎?提前致謝。加入兩個查詢
解決這個問題的一種方法是在幾個步驟中完成這項工作。在將結果集加入查詢之前,您需要將其保存在臨時表或表變量中。 (如果你期待一個大的結果集的臨時表可能是可取的。)
基本上,你的查詢將改變這樣的事情:
/* prepare the storage */
IF OBJECT_ID('tempdb..#sp_results') IS NOT NULL
DROP TABLE #sp_results;
CREATE TABLE #sp_results (
/* the types may be wrong, please modify as necessary */
currency_cd int,
salary decimal(10,2)
);
/* save the results of the SP */
INSERT INTO #sp_results
EXEC SP_namearguments…
/* use the saved results in your query */
SELECT
your present columns,
tmp.currency_cd,
tmp.salary
FROM
your present joins
LEFT OUTER JOIN #sp_results AS tmp ON a proper join condition
;
的問題是,雖然,你的SP被設計成返回個人員工的結果,同時查詢似乎正在檢索多個員工的數據。要解決該問題,您可以將employee_code
列添加到臨時表中,並使用循環在遊標中逐個獲取/保存每個員工的結果。
但是,這可能是最糟糕的使用遊標的例子之一。一個更好的選擇可能是創建返回相同的數據,因爲SP視圖,但所有員工:
CREATE VIEW employees_compensation_view
AS
SELECT
employee_code,
currency_cd,
SUM(comprate) AS salary
FROM employees_compensation
GROUP BY
employee_code,
currency_cd
你會那麼可以只對視圖加入到您的查詢,像這樣:
SELECT
your present columns,
ecv.currency_cd,
ecv.salary
FROM
your present joins
LEFT OUTER JOIN employees_compensation_view AS ecv
ON b.employee_code = ecv.employee_code
;
對於你的業務邏輯的更好的封裝,你也可以更改存儲過程的查詢是這樣的:
SELECT
currency_cd,
salary
FROM employees_compensation_view
WHERE employee_code = @emp_code
也就是說,如果你仍然需要那個SP。
謝謝。我創建了employees_compensation_view並將其加入到我的查詢中。 –