我对这些表具有只读访问权限,并且需要构建一个查询,该查询将根据每个部件号的图像记录数列出部件号记录的计数。本质上,我需要将结果格式化为如下所示:
vendor_desc|包含 1 个图像的零件计数|包含 2 个图像的零件计数|...
供应商XYZ|250|307
我做了一个联合查询,在一列中列出结果,但需要按图像计数分隔各列。这是我的联合查询:
SELECT vnd.vendor_desc,
Count(img1.[part#]) part
FROM [mytable].[dbo].[parts_images] AS img1
INNER JOIN mytable.dbo.vendors AS vnd
ON vnd.vendor_id = LEFT(img1.part#, 3)
INNER JOIN (SELECT img2.part#,
Count(img2.image_file)images
FROM [mytable].[dbo].[parts_images] AS img2
GROUP BY img2.part#
HAVING ( Count(img2.image_file) = 1 )) AS img2
ON img1.part# = img2.part#
GROUP BY vendor_desc
UNION
SELECT vnd.vendor_desc,
Count(img1.[part#]) part
FROM [mytable].[dbo].[parts_images] AS img1
INNER JOIN mytable.dbo.vendors AS vnd
ON vnd.vendor_id = LEFT(img1.part#, 3)
INNER JOIN (SELECT img2.part#,
Count(img2.image_file)images
FROM [mytable].[dbo].[parts_images] AS img2
GROUP BY img2.part#
HAVING ( Count(img2.image_file) = 2 )) AS img2
ON img1.part# = img2.part#
GROUP BY vendor_desc
ORDER BY vendor_desc
提前致谢!
这是我正在寻找的结果的查询:
SELECT vnd.vendor_desc,
Count(img2.[part#]) part
,COUNT(img3.part#)
FROM mytable.[dbo].[parts_images] AS img1
INNER JOIN mytable.dbo.vendors AS vnd
ON vnd.vendor_id = LEFT(img1.part#, 3)
left JOIN (SELECT img2.part#,
Count(img2.image_file)images
FROM mytable.[dbo].[parts_images] AS img2
GROUP BY img2.part#
HAVING ( Count(img2.image_file) = 1 )) AS img2
ON img1.part# = img2.part#
left JOIN (SELECT img3.part#,
Count(img3.image_file)images
FROM mytable.[dbo].[parts_images] AS img3
GROUP BY img3.part#
HAVING ( Count(img3.image_file) = 2 )) AS img3
ON img1.part# = img3.part#
GROUP BY vendor_desc
order by vendor_desc
感谢您的帮助,podiluska!
最佳答案
所以
SELECT *
FROM (yourunionquery) src
PIVOT
(COUNT(vendor_desc) FOR part IN ([1],[2],[3], ... )) p
如果您需要可变数量的列,则必须使用动态 SQL 构建此查询来填充结果列
关于mysql - 透视此联合查询的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12142206/