我正在尝试构建代码来创建SSRS报告。文件夹类型ID 19表示会员ID。如果文件夹类型ID包含* 1300,则表示* 1300之前位于该字段中的提供者ID。我目前正在执行的操作的问题是它正在创建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'
答案 0 :(得分:0)
您可以按选择的所有列进行分组,并汇总到要合并为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
我也从两个CASE语句中删除了ELSE null
,因为它是多余的。
答案 1 :(得分:0)
您可以在select子句中选择子查询中的两个属性:
SELECT
dh.xml_file_id,
dh.document_id,
dh.document_description,
dh.document_date,
(
SELECT xfi.folder_id
FROM reporting.facetsrunout.folder_id xfi
WHERE xfi.xml_file_id = dh.xml_file_id
AND xfi.folder_type_id = '19'
) AS memberid,
(
SELECT LEFT(xfi.folder_id, LEN(xfi.folder_id) - 5)
FROM reporting.facetsrunout.folder_id xfi
WHERE xfi.xml_file_id = dh.xml_file_id
AND RIGHT(xfi.folder_id, 5) = '*1300'
) AS providerid,
xfl.xml_file_name
dp.document_file_path
FROM reporting.facetsrunout.document_header dh
JOIN reporting.facetsrunout.document_page dp ON dp.xml_file_id = dh.xml_file_id
JOIN reporting.facetsrunout.xml_file_list xfl ON xfl.xml_file_id = dh.xml_file_id
WHERE dh.document_id = '07330C906700';