2017-02-15 49 views
0

我希望從表BAUSER獲得USER_FNM(用戶的名字),每個USER_KEY。從我的查詢返回結果,但只顯示USER_FNM從表中的第一個 - Superadministrator。我不知道什麼是錯的 - USER_KEY是否在子查詢中迭代?來自主要查詢的子查詢中的變量

下面是查詢:

SELECT DISTINCT USER_KEY, (SELECT TOP(1) USER_FNM FROM BAUSER WHERE BAUSER.USER_KEY = USER_KEY), SUM([110000003]),SUM([120000002]),SUM([120000003]) 
FROM CAUSDE_TAS CA 
PIVOT 
(
SUM(USDE_HSU) 
FOR DEPA_KEY IN ([110000003],[120000002],[120000003] 
) PIVOT_LOCATIONS 
WHERE USDE_DAT >= '01.12.2016' AND USDE_DAT <= '03.02.2017' 
AND USER_KEY IN (100000002,100000004,100000006,100000008,100000011) 
GROUP BY USER_KEY 

這裏有結果:

enter image description here

+1

這種行爲背後的原因是, USER_KEY作爲列存在於BAUSER表和PIVOT_LOCATIONS結果中表。大多數情況下,SQL查詢優化器讀取關閉USER_KEY的BAUSER.USER_KEY,所以它以BAUSER.USER_KEY = BAUSER.USER_KEY結束,該BAUSER.USER_KEY返回BAUSER表中的所有行。之後我們有TOP(1),它返回第一條記錄(顯然是「Suporadministrator」)。如果沒有TOP(1)子句,這個查詢應該可以正常工作,因爲我猜USER_KEY是唯一的。通過刪除TOP(1),故障邏輯將立即彈出。 – Vladislav

回答

2

使用PIVOT_LOCATIONS.USER_KEY在您的子查詢:

SELECT DISTINCT USER_KEY, (SELECT TOP(1) USER_FNM FROM BAUSER WHERE BAUSER.USER_KEY = PIVOT_LOCATIONS.USER_KEY), SUM([110000003]),SUM([120000002]),SUM([120000003]) 
    FROM CAUSDE_TAS CA 
    PIVOT 
    (
    SUM(USDE_HSU) 
    FOR DEPA_KEY IN ([110000003],[120000002],[120000003] 
    ) PIVOT_LOCATIONS 
    WHERE USDE_DAT >= '01.12.2016' AND USDE_DAT <= '03.02.2017' 
    AND USER_KEY IN (100000002,100000004,100000006,100000008,100000011) 
    GROUP BY USER_KEY 
+0

這是拋出錯誤:無法綁定多部分標識符「CA.USER_KEY」。 – FrenkyB

+1

不是「CA.USER_KEY」,而是應該使用「PIVOT_LOCATIONS.USER_KEY」 – Vladislav

+0

你是對的,弗拉迪斯拉夫 –