2017-02-15 95 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

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