Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提供重复值的Transact-SQL Select查询_Sql_Tsql - Fatal编程技术网

提供重复值的Transact-SQL Select查询

提供重复值的Transact-SQL Select查询,sql,tsql,Sql,Tsql,首先,谢谢你花时间看这个 我试图从3个表中收集数据,并制作一个参考图表,允许最终用户查看存储的数据 对于本例,我基本上有3个表: 用户: 技能类型: SKILL_PK SKILL_NAME 11 Point of Sale 22 Digital Sales 33 Customer Service 44 Specialist Support 技能协会: SKILL_ASSOC_PK SKILL_PK USER_PK START_DATE STOP_DATE Prior

首先,谢谢你花时间看这个

我试图从3个表中收集数据,并制作一个参考图表,允许最终用户查看存储的数据

对于本例,我基本上有3个表: 用户:

技能类型:

SKILL_PK    SKILL_NAME
11  Point of Sale
22  Digital Sales
33  Customer Service
44  Specialist Support
技能协会:

SKILL_ASSOC_PK  SKILL_PK    USER_PK START_DATE  STOP_DATE   Priority
99  11  1   36526   500000  2
88  11  2   36527   500000  3
77  22  1   36526   500000  3
66  33  3   36528   500000  1
55  44  4   36525   500000  1
444 33  4   36525   500000  4
(我知道我在SQL Express中对这些数据进行编目时可能违反了一些规则,但这只是一个示例,不能代表我正在使用的真实数据)

我的Select查询为每个用户返回多行不需要的结果: 声明:

 SELECT USERS.[USER_NAME], USERS.[USER_ID], 
    (CASE WHEN ST.SKILL_NAME ='Point of Sale' Then  SA.[PRIORITY] END) AS 'POS', 

    (CASE WHEN ST.SKILL_NAME ='Digital Sales' Then  SA.[PRIORITY] END) AS 'DS',
    (CASE WHEN ST.SKILL_NAME ='Customer Service' Then  SA.[PRIORITY] END) AS 'CS',
    (CASE WHEN ST.SKILL_NAME ='Specialist Support' Then  SA.[PRIORITY] END) AS 'Spec'
    FROM USERS
    INNER JOIN [dbo].[SKILL_ASSOCIATION] AS SA ON SA.USER_PK = USERS.USER_PK
    INNER JOIN SKILL_TYPE AS ST ON ST.SKILL_PK = SA.SKILL_PK
结果:

USER_NAME   USER_ID POS DS  CS  Spec
Bob 10000       2   NULL    NULL    NULL
Sally   10001       3   NULL    NULL    NULL
Bob 10000       NULL    3   NULL    NULL
Joe 10003       NULL    NULL    1   NULL
Susan   10004       NULL    NULL    NULL    1
Susan   10004       NULL    NULL    4   NULL
我也尝试过使用distinct,结果类似。 预期结果:

NAME    ID  POS DS  CS  Spec
Bob     1   2   3       
Sally   2   3           
Joe                 1
Susan               4   1
我使用此SQL Server的查询访问权限非常有限,无法从中创建/修改或删除以实现我的目标

任何指导都将不胜感激

谢谢,
Steven

您的预期输出意味着,按用户进行聚合,同时获取每个
案例
表达式的
MAX
,应该可以:

SELECT
    u.[USER_NAME],
    u.[USER_ID], 
    MAX(CASE WHEN ST.SKILL_NAME = 'Point of Sale' THEN SA.[PRIORITY] END) AS POS, 
    MAX(CASE WHEN ST.SKILL_NAME = 'Digital Sales' THEN SA.[PRIORITY] END) AS DS,
    MAX(CASE WHEN ST.SKILL_NAME = 'Customer Service' THEN SA.[PRIORITY] END) AS CS,
    MAX(CASE WHEN ST.SKILL_NAME = 'Specialist Support' THEN SA.[PRIORITY] END) AS Spec
FROM USERS u
INNER JOIN [dbo].[SKILL_ASSOCIATION] AS SA
    ON SA.USER_PK = u.USER_PK
INNER JOIN SKILL_TYPE AS ST
    ON ST.SKILL_PK = SA.SKILL_PK
GROUP BY
    u.[USER_NAME],
    u.[USER_ID];

谢谢你Yogesh Sharma!搞不清楚格式。天哪,太快了!这正是我想要的,非常感谢!一旦计时器用完,我将标记为已接受。
SELECT
    u.[USER_NAME],
    u.[USER_ID], 
    MAX(CASE WHEN ST.SKILL_NAME = 'Point of Sale' THEN SA.[PRIORITY] END) AS POS, 
    MAX(CASE WHEN ST.SKILL_NAME = 'Digital Sales' THEN SA.[PRIORITY] END) AS DS,
    MAX(CASE WHEN ST.SKILL_NAME = 'Customer Service' THEN SA.[PRIORITY] END) AS CS,
    MAX(CASE WHEN ST.SKILL_NAME = 'Specialist Support' THEN SA.[PRIORITY] END) AS Spec
FROM USERS u
INNER JOIN [dbo].[SKILL_ASSOCIATION] AS SA
    ON SA.USER_PK = u.USER_PK
INNER JOIN SKILL_TYPE AS ST
    ON ST.SKILL_PK = SA.SKILL_PK
GROUP BY
    u.[USER_NAME],
    u.[USER_ID];