合并 SQL 查询的结果
Combine results of SQL Query
我已经对一项看似 的简单任务做了一些研究,但未能找到简单的解决方案。我想以最简单的方式提出这个问题,以便其他人和我自己可以从类似情况中受益。我遇到了一个需要重构的查询,它产生了一些奇怪的结果。
改变这些结果的最佳方式是什么:
ID Customer CustomerID (US) CustomerID (CA) CustomerID (EU)
-----------------------------------------------------------------------
1 XYZ XYZ - US NULL NULL
2 XYZ NULL XYZ - CA NULL
3 XYZ NULL NULL XYZ - EU
进入这个:
ID Customer CustomerID (US) CustomerID (CA) CustomerID (EU)
-----------------------------------------------------------------------
1 XYZ XYZ - US XYZ - CA XYZ - EU
如果有不止一种方法,遵循最新最佳实践的最佳方法是什么?
以下是目前产生第一个结果的一些示例代码:
SELECT Header.ID,
Header.Customer,
CASE Detail.Location
WHEN 'US' THEN Detail.CustomerID
ELSE NULL
END AS [CustomerID (US)],
CASE Detail.Location
WHEN 'CA' THEN Detail.CustomerID
ELSE NULL
END AS [CustomerID (CA)],
CASE Detail.Location
WHEN 'EU' THEN Detail.CustomerID
ELSE NULL
END AS [CustomerID (EU)]
FROM dbo.Header AS Header
LEFT OUTER JOIN dbo.Detail AS Detail
ON Header.ID = Detail.HeaderID
非常感谢您的帮助!
您只需要聚合:
SELECT MIN(Header.ID) as ID, Header.Customer,
MAX(CASE Detail.Location WHEN 'US' THEN Detail.CustomerID
END) AS [CustomerID (US)],
MAX(CASE Detail.Location WHEN 'CA' THEN Detail.CustomerID
END) AS [CustomerID (CA)],
MAX(CASE Detail.Location WHEN 'EU' THEN Detail.CustomerID
END) AS [CustomerID (EU)]
FROM dbo.Header LEFT OUTER JOIN
dbo.Detail Detail
ON Header.ID = Detail.HeaderID
GROUP BYHeader.Customer
我已经对一项看似 的简单任务做了一些研究,但未能找到简单的解决方案。我想以最简单的方式提出这个问题,以便其他人和我自己可以从类似情况中受益。我遇到了一个需要重构的查询,它产生了一些奇怪的结果。
改变这些结果的最佳方式是什么:
ID Customer CustomerID (US) CustomerID (CA) CustomerID (EU)
-----------------------------------------------------------------------
1 XYZ XYZ - US NULL NULL
2 XYZ NULL XYZ - CA NULL
3 XYZ NULL NULL XYZ - EU
进入这个:
ID Customer CustomerID (US) CustomerID (CA) CustomerID (EU)
-----------------------------------------------------------------------
1 XYZ XYZ - US XYZ - CA XYZ - EU
如果有不止一种方法,遵循最新最佳实践的最佳方法是什么?
以下是目前产生第一个结果的一些示例代码:
SELECT Header.ID,
Header.Customer,
CASE Detail.Location
WHEN 'US' THEN Detail.CustomerID
ELSE NULL
END AS [CustomerID (US)],
CASE Detail.Location
WHEN 'CA' THEN Detail.CustomerID
ELSE NULL
END AS [CustomerID (CA)],
CASE Detail.Location
WHEN 'EU' THEN Detail.CustomerID
ELSE NULL
END AS [CustomerID (EU)]
FROM dbo.Header AS Header
LEFT OUTER JOIN dbo.Detail AS Detail
ON Header.ID = Detail.HeaderID
非常感谢您的帮助!
您只需要聚合:
SELECT MIN(Header.ID) as ID, Header.Customer,
MAX(CASE Detail.Location WHEN 'US' THEN Detail.CustomerID
END) AS [CustomerID (US)],
MAX(CASE Detail.Location WHEN 'CA' THEN Detail.CustomerID
END) AS [CustomerID (CA)],
MAX(CASE Detail.Location WHEN 'EU' THEN Detail.CustomerID
END) AS [CustomerID (EU)]
FROM dbo.Header LEFT OUTER JOIN
dbo.Detail Detail
ON Header.ID = Detail.HeaderID
GROUP BYHeader.Customer