Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
SQL Server-具有多个联接和字符串的分组依据_Sql_Join_Group By_Concat - Fatal编程技术网

SQL Server-具有多个联接和字符串的分组依据

SQL Server-具有多个联接和字符串的分组依据,sql,join,group-by,concat,Sql,Join,Group By,Concat,我已经搜索了许多类似的主题,但仍在努力让它工作。在进行了几次表连接之后,我特别尝试对一列进行分组。任何帮助都将不胜感激 今日产量 Account System System Plan Code Account Plan Code Request 12345 Sys1 Sys1 P1 12345 P1 00001 12345 Sys1 Sys1 P2 NULL NULL NUL

我已经搜索了许多类似的主题,但仍在努力让它工作。在进行了几次表连接之后,我特别尝试对一列进行分组。任何帮助都将不胜感激

今日产量

Account System  System  Plan Code   Account Plan Code   Request
12345   Sys1    Sys1    P1         12345    P1          00001
12345   Sys1    Sys1    P2         NULL     NULL        NULL
12345   Sys2    Sys2    P3         12345    P3          00002
34567   Sys1    Sys1    P1         NULL     NULL        NULL
34567   Sys1    Sys1    P2         34567    P2          00003
45678   Sys3    Sys3    P4         NULL     NULL        NULL
期望输出

Account System  System  Plan Code   Account Plan Code   Request
12345   Sys1    Sys1    P1          12345   P1, P2      00001
12345   Sys2    Sys2    P3          12345   P3          00002
34567   Sys1    Sys1    P2          34567   P1,P2       00003
45678   Sys3    Sys3    P4          NULL    NULL        NULL
我将加入几个表,并希望将计划代码合并到每个唯一帐户到系统映射的一行中

  • Tab1=账户和系统
  • Tab2=系统和计划代码(映射到 显示与每个系统相关的计划代码)
  • 表3=账户、计划代码、申请#
我丢失了group by我尝试了一列group by,但得到的错误不是group by表达式。因此,我包含了所有列,这根本不会改变输出

SELECT      A.ACCOUNT, A.SYSTEM, B.SYSTEM, B.PCODE, C.ACCOUNT, C.PCODE, C.REQUEST
FROM        MYDB.TAB1 A
LEFT JOIN   MYDB.TAB2 B 
ON      A.SYSTEM = B.SYSTEM
LEFT JOIN   MYDB.TAB3 C
ON      A.ACCOUNT = C.ACCOUNT AND B.PCODE = C.PCODE
WHERE       A.ACCOUNT IS NOT NULL
ORDER BY    A.ACCOUNT

如果您不需要连接计划,请查看以下
分组方式
实施是否适合您的需要。我删除了这个脚本的几个列。为了遵守聚合查询限制,我在
C.PCODE
周围使用了
MAX
(也可以是
MIN
)和
MAX
,用于
C.REQUEST
,这似乎是摆脱
NULL
的好选择

SELECT      A.ACCOUNT, A.SYSTEM, MAX(C.PCODE), MAX(C.REQUEST)
FROM        MYDB.TAB1 A
LEFT JOIN   MYDB.TAB2 B 
ON      A.SYSTEM = B.SYSTEM
LEFT JOIN   MYDB.TAB3 C
ON      A.ACCOUNT = C.ACCOUNT AND B.PCODE = C.PCODE
WHERE       A.ACCOUNT IS NOT NULL
GROUP BY A.ACCOUNT, A.SYSTEM
ORDER BY    A.ACCOUNT

实际输出中的列数与显示的查询不匹配。您可以发布生成输出的实际查询吗?我将更新输出,这是我刚才手动键入的实际查询输出预览,只关注我关心的列,因为有些列是重复的。我现在将更新它,使其清晰。感谢您查看它,这里的主要挑战是连接
计划代码
,因为MS SQL Server没有与
组连接直接类似的代码。剩下的似乎微不足道,谢谢你。我添加了完整的输出,这应该会让它更清晰,很抱歉,我从一开始就没有。在输出中,我需要知道帐户是否有文件请求。请求可以根据多种不同的可接受计划代码提交,只要我们有一个可接受的计划代码。我还关心对于给定的帐户系统映射是否没有任何文件上的请求。这似乎起到了作用。感谢您对PM 77-1的帮助,这看起来满足了我的核心需求。