我有一个表包含销售记录,另一个表包含每个记录的附加详细信息。我需要做的是构建一个查询第一个表的查询,并为每个记录在一个虚拟列中列出额外的详细信息,如下所示:“记录1的额外详细信息# 1 :一些额外的详细信息;记录1的额外详细信息#2 :更多额外的详细信息;...”基本上,此列是所有附加字段记录值的串联。
对于主表中的一条记录可以具有的附加详细信息(附加详细信息表中的记录)数量没有限制。
你对如何做到这一点有什么建议吗?
发布于 2009-07-14 02:02:50
在MySQL
中
SELECT s.*,
GROUP_CONCAT(detail)
FROM sales s
JOIN details d
ON d.sale_id = s.id
GROUP BY
s.id
在SQL Server
中
SELECT s.*,
(
SELECT CASE WHEN ROW_NUMBER() OVER (ORDER BY sale_id) = 1 THEN ', ' ELSE '' END + detail
FROM details d
WHERE d.sale_id = s.id
FOR XML PATH('')
)
FROM sales s
在PostgreSQL
中
SELECT s.*,
ARRAY_TO_STRING (
ARRAY
(
SELECT detail
FROM details d
WHERE d.sale_id = s.id
), ', ')
)
FROM sales s
在Oracle
中
WITH q AS (
SELECT d.sale_id, d.detail,
ROW_NUMBER() OVER (PARTITION BY d.sale_id ORDER BY d.detail) AS rn
FROM sales s
JOIN details d
ON d.sale_id = s.id
)
SELECT *
FROM (
SELECT *
FROM q
MODEL
PARTITION BY
(sale_id)
DIMENSION BY
(rn)
MEASURES
(detail, detail AS group_concat, 0 AS mark)
RULES UPDATE (
group_concat[rn > 1] = group_concat[CV() - 1] || ', ' || detail[CV()],
mark[ANY] = PRESENTV(mark[CV() + 1], 0, 1)
)
)
WHERE mark = 1
ORDER BY
id
发布于 2009-07-14 02:01:57
对于SQL Server2005和更高版本,您可以使用此method
https://stackoverflow.com/questions/1124468
复制相似问题