Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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_Sql Server - Fatal编程技术网

在SQL Server中获取一行中的所有记录

在SQL Server中获取一行中的所有记录,sql,sql-server,Sql,Sql Server,我正在编写一个SQL查询来创建这样的计算列:(代码的简化版本) 当我运行此查询时,报告就是这样的。它创建多个行,其中第一个条件用于多个列。如何获取唯一的记录 CUSTID NAME ADDRESS Col1 Col2 Col3 Col4 Col5 101 Nikh US X X X X X 102 Chris Canada Yes X X X

我正在编写一个SQL查询来创建这样的计算列:(代码的简化版本)

当我运行此查询时,报告就是这样的。它创建多个行,其中第一个条件用于多个列。如何获取唯一的记录

CUSTID  NAME    ADDRESS Col1    Col2    Col3    Col4    Col5
 101    Nikh    US       X       X       X       X       X
 102    Chris   Canada   Yes     X       X       X       X
 102    Chris   Canada   X       X       Yes     X       X
 103    Todd    Japan    X       X       X       Yes     X
 103    Todd    Japan    X       X       X       X       Yes
 104    Levis   China    X       X       X       X       X
 105    Jack    Germany  X       Yes     X       X       X
 105    Jack    Germany  X       X       Yes     X       X
预期结果:

CUSTID  NAME    ADDRESS Col1    Col2    Col3    Col4    Col5
  101   Nikh    US       X      X       X       X        X
  102   Chris   Canada   Yes    X       Yes     X        X
  103   Todd    Japan    X      X       X       Yes      Yes
  104   Levis   China    X      X       X       X        X
  105   Jack    Germany  X      Yes     Yes     X        X
使用
MAX

SELECT  CUST_ID, 
        NAME, 
        ADDRESS,
        MAX(CASE WHEN STIP_ID = 20 AND STATUS = 'OPEN' THEN 'YES' ELSE 'X' END) AS COL1,
        MAX(CASE WHEN STIP_ID = 21 AND STATUS = 'OPEN' THEN 'YES' ELSE 'X' END) AS COL2,
        MAX(CASE WHEN STIP_ID = 22 AND STATUS = 'OPEN' THEN 'YES' ELSE 'X' END) AS COL3,
        MAX(CASE WHEN STIP_ID = 23 AND STATUS = 'OPEN' THEN 'YES' ELSE 'X' END) AS COL4,
        MAX(CASE WHEN STIP_ID = 24 AND STATUS = 'OPEN' THEN 'YES' ELSE 'X' END) AS COL5
FROM TABLE1
GROUP BY CUST_ID, 
         NAME, 
         ADDRESS
使用
MAX

SELECT  CUST_ID, 
        NAME, 
        ADDRESS,
        MAX(CASE WHEN STIP_ID = 20 AND STATUS = 'OPEN' THEN 'YES' ELSE 'X' END) AS COL1,
        MAX(CASE WHEN STIP_ID = 21 AND STATUS = 'OPEN' THEN 'YES' ELSE 'X' END) AS COL2,
        MAX(CASE WHEN STIP_ID = 22 AND STATUS = 'OPEN' THEN 'YES' ELSE 'X' END) AS COL3,
        MAX(CASE WHEN STIP_ID = 23 AND STATUS = 'OPEN' THEN 'YES' ELSE 'X' END) AS COL4,
        MAX(CASE WHEN STIP_ID = 24 AND STATUS = 'OPEN' THEN 'YES' ELSE 'X' END) AS COL5
FROM TABLE1
GROUP BY CUST_ID, 
         NAME, 
         ADDRESS

发布的问题解决方案:

SELECT [CUST_ID],[NAME],[ADDRESS],[20],[21],[22],[23],[24]
FROM TABLE1
CROSS APPLY (SELECT CASE [STATUS] WHEN 'OPEN' THEN 'YES' ELSE 'X' END [YES OR X])
PIVOT(MAX([YES OR X]) FOR [STIP_ID] IN ([20],[21],[22],[23],[24]) ) P
SELECT
  [CUST_ID], [NAME], [ADDRESS],
  ISNULL([20],'X'), ISNULL([21],'X'), ISNULL([22],'X'), ISNULL([23],'X'), ISNULL([24],'X')
FROM TABLE1
CROSS APPLY (CASE WHEN Stips.StipulationID = 90 AND Stips.StatusID IN (39, 41) THEN '('TR10_Pers_FS_Curr_Signed' + '- ' + Prim.PrimaryCust) ELSE 'X' END) AS TR10_Pers_FS_Curr_Signed)
PIVOT(MAX(TR10_Pers_FS_Curr_Signed) FOR [STIP_ID] IN ([20],[21],[22],[23],[24]) ) P
适应新需求的解决方案:

SELECT [CUST_ID],[NAME],[ADDRESS],[20],[21],[22],[23],[24]
FROM TABLE1
CROSS APPLY (SELECT CASE [STATUS] WHEN 'OPEN' THEN 'YES' ELSE 'X' END [YES OR X])
PIVOT(MAX([YES OR X]) FOR [STIP_ID] IN ([20],[21],[22],[23],[24]) ) P
SELECT
  [CUST_ID], [NAME], [ADDRESS],
  ISNULL([20],'X'), ISNULL([21],'X'), ISNULL([22],'X'), ISNULL([23],'X'), ISNULL([24],'X')
FROM TABLE1
CROSS APPLY (CASE WHEN Stips.StipulationID = 90 AND Stips.StatusID IN (39, 41) THEN '('TR10_Pers_FS_Curr_Signed' + '- ' + Prim.PrimaryCust) ELSE 'X' END) AS TR10_Pers_FS_Curr_Signed)
PIVOT(MAX(TR10_Pers_FS_Curr_Signed) FOR [STIP_ID] IN ([20],[21],[22],[23],[24]) ) P

发布的问题解决方案:

SELECT [CUST_ID],[NAME],[ADDRESS],[20],[21],[22],[23],[24]
FROM TABLE1
CROSS APPLY (SELECT CASE [STATUS] WHEN 'OPEN' THEN 'YES' ELSE 'X' END [YES OR X])
PIVOT(MAX([YES OR X]) FOR [STIP_ID] IN ([20],[21],[22],[23],[24]) ) P
SELECT
  [CUST_ID], [NAME], [ADDRESS],
  ISNULL([20],'X'), ISNULL([21],'X'), ISNULL([22],'X'), ISNULL([23],'X'), ISNULL([24],'X')
FROM TABLE1
CROSS APPLY (CASE WHEN Stips.StipulationID = 90 AND Stips.StatusID IN (39, 41) THEN '('TR10_Pers_FS_Curr_Signed' + '- ' + Prim.PrimaryCust) ELSE 'X' END) AS TR10_Pers_FS_Curr_Signed)
PIVOT(MAX(TR10_Pers_FS_Curr_Signed) FOR [STIP_ID] IN ([20],[21],[22],[23],[24]) ) P
适应新需求的解决方案:

SELECT [CUST_ID],[NAME],[ADDRESS],[20],[21],[22],[23],[24]
FROM TABLE1
CROSS APPLY (SELECT CASE [STATUS] WHEN 'OPEN' THEN 'YES' ELSE 'X' END [YES OR X])
PIVOT(MAX([YES OR X]) FOR [STIP_ID] IN ([20],[21],[22],[23],[24]) ) P
SELECT
  [CUST_ID], [NAME], [ADDRESS],
  ISNULL([20],'X'), ISNULL([21],'X'), ISNULL([22],'X'), ISNULL([23],'X'), ISNULL([24],'X')
FROM TABLE1
CROSS APPLY (CASE WHEN Stips.StipulationID = 90 AND Stips.StatusID IN (39, 41) THEN '('TR10_Pers_FS_Curr_Signed' + '- ' + Prim.PrimaryCust) ELSE 'X' END) AS TR10_Pers_FS_Curr_Signed)
PIVOT(MAX(TR10_Pers_FS_Curr_Signed) FOR [STIP_ID] IN ([20],[21],[22],[23],[24]) ) P


你能提供所需的数据集吗?你说的是将信息汇总到每个客户ID上吗?@Kris你是对的。你能提供所需的数据集吗?你说的是将信息汇总到每个客户ID上吗?@Kris你是对的。有效吗?我们可以从字符串类型参数得到一个MAX函数吗?谢谢,我不知道。这不起作用。它只是删除所有具有重复符的记录。但这不是我想要的。请看你想要的result@user3076028我看到了期望的结果,这应该会给你。如果没有,那么请发布一个SQLFIDLE示例数据,而不是说“这不起作用”。查询不会从您的数据库中删除任何内容table@user3076028除非你改变你的问题。答案符合当前要求,
MIN
适用于您在评论中发布的修改后的问题,是否有效?我们可以从字符串类型参数得到一个MAX函数吗?谢谢,我不知道。这不起作用。它只是删除所有具有重复符的记录。但这不是我想要的。请看你想要的result@user3076028我看到了期望的结果,这应该会给你。如果没有,那么请发布一个SQLFIDLE示例数据,而不是说“这不起作用”。查询不会从您的数据库中删除任何内容table@user3076028除非你改变你的问题。答案符合当前要求,
MIN
适用于您在评论中发布的修改后的问题我也喜欢您的答案。但是我的
CASE语句
MIN(当Stips.constrationId=90且Stips.StatusID在(39,41)中时的CASE),然后'('TR10_Pers_FS_Curr_签名'+'-'+Prim.PrimaryCust)或者'X'END)作为TR10_Pers_FS_Curr签名
。你观察到有“是”的字段,在我的实时代码中实际上是一个动态字段。我也喜欢你的答案。但是我的
CASE语句
MIN(当Stips.constrationId=90且Stips.StatusID在(39,41)中时的CASE),然后'('TR10_Pers_FS_Curr_签名'+'-'+Prim.PrimaryCust)或者'X'END)作为TR10_Pers_FS_Curr签名
。你观察到有“是”的字段,在我的实时代码中,它实际上是一个动态字段。