首页 > 解决方案 > 将 SQL 数据合并为 1 行

问题描述

我正在尝试构建代码来创建 SSRS 报告。文件夹类型ID 19表示成员ID。如果文件夹类型 ID 包含 *1300,则它表示位于该字段中的提供程序 ID,位于 *1300 之前。我目前如何做的问题是它正在创建 2 行。其中提供者 ID 已填充,但成员 ID 显示为 NULL。另一个填充了成员 ID 但提供者 ID 显示为 NULL。我想要做的是将它们组合起来,所以我只返回 1 行,同时正确填充了成员 ID 和提供者 ID。解决此问题的最佳方法是什么?提前感谢您的任何帮助!

SELECT
xfl.xml_file_id                         
, dh.document_id                            
, dh.document_description                   
, dh.document_date                          
, CASE WHEN xfi.FOLDER_TYPE_ID = '19' THEN xfi.folder_id ELSE null END AS 
MemberID
, CASE WHEN RIGHT(xfi.folder_id, 5) = '*1300' THEN LEFT(xfi.folder_id, 
LEN(xfi.folder_id) - 5) ELSE null END AS ProviderID
, xfl.xml_file_name                         
, dp.document_file_path                     


FROM 
reporting.[FacetsRunout].[XML_FILE_LIST]            xfl 
JOIN reporting.[FacetsRunout].[Folder_ID]           xfi      
ON xfi.XML_FILE_ID = XFL.XML_FILE_ID
JOIN reporting.[FacetsRunout].[Document_Page]       dp       
ON dp.XML_FILE_ID = xfl.XML_FILE_ID
JOIN reporting.[FacetsRunout].[Document_Header]     dh       
ON 
   dh.XML_FILE_ID = xfl.XML_FILE_ID

WHERE
dh.DOCUMENT_ID = '07330C906700'

标签: sqlduplicates

解决方案


您可以按您选择的所有列进行分组,并在要合并为 1 行的列上进行聚合:

SELECT
xfl.xml_file_id                         
, dh.document_id                            
, dh.document_description                   
, dh.document_date                          
, MAX(CASE WHEN xfi.FOLDER_TYPE_ID = '19' THEN xfi.folder_id END) AS MemberID
, MAX(CASE WHEN RIGHT(xfi.folder_id, 5) = '*1300' THEN LEFT(xfi.folder_id,LEN(xfi.folder_id) - 5) END) AS ProviderID
, xfl.xml_file_name                         
, dp.document_file_path                     
FROM 
reporting.[FacetsRunout].[XML_FILE_LIST]            xfl 
JOIN reporting.[FacetsRunout].[Folder_ID]           xfi      
ON xfi.XML_FILE_ID = XFL.XML_FILE_ID
JOIN reporting.[FacetsRunout].[Document_Page]       dp       
ON dp.XML_FILE_ID = xfl.XML_FILE_ID
JOIN reporting.[FacetsRunout].[Document_Header]     dh       
ON dh.XML_FILE_ID = xfl.XML_FILE_ID
WHERE dh.DOCUMENT_ID = '07330C906700'
GROUP BY 
xfl.xml_file_id                         
, dh.document_id                            
, dh.document_description                   
, dh.document_date                          
, xfl.xml_file_name                         
, dp.document_file_path

我也ELSE null从两个 CASE 语句中删除,因为它是多余的。


推荐阅读