mysql - 透视此联合查询的结果?

标签 mysql sql sql-server-2008

我对这些表具有只读访问权限,并且需要构建一个查询,该查询将根据每个部件号的图像记录数列出部件号记录的计数。本质上,我需要将结果格式化为如下所示:

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/

相关文章:

mysql - 将 MySQL tinyint 类型转换为 bit

mysql - 尝试使用 mysql v5.5 创建表关系

mysql - 如何强制命令行中的 MySQL 命令不提示 y/n?

sql - 更新分区表

sql-server - 动态sql公式字符串列转换为日期

sql - 一个模式的存储过程可以访问其他模式的表

php - MySQL 查找时间片中的日期间隙

mysql - 如何连接两个表并按第三个表排序?

mysql - 连接两个表,按列分组并获取所有列

SQL 计数、非重复和分区