sql - 将 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'
解决方案
您可以按您选择的所有列进行分组,并在要合并为 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 语句中删除,因为它是多余的。
推荐阅读
- interstitial - 我想在 3 分钟交易时显示 facebook audiance network 插页式广告
- python-3.x - 时间序列数据在差分后不是平稳的?
- php - PHP 使用 str_starts_with 排除与通配符相同的数组
- vb.net - 如何在 VISUAL BASIC 中延迟打开下一个表单
- javascript - React:如何从不同的 onChange 事件触发 onChange 事件?
- openedge - 如何减少 Progress Developer Studio for OpenEdge 中的源代码修改?
- discord - 如何在其中创建一个包含 2 个单词的命令 Discordjs
- python - 在 TensorFlow Docker 映像中使用 Keras?
- python - 带条件的正则表达式
- javascript - 每次从下拉列表中选择项目时,如何使图表动态化?