从第一个 table 中排除值的联合
Union which excludes values from the first table
我试图解决的原始问题是我需要显示特定 "joined" table 中的所有行。然而,这些有时是空白的,没有总数,通常不会显示(想想每个类别和计数)。
所以我想做的是合并到一个“0 值”数据集以显示所有类别。但是,当我执行合并时,它显示一个 0 值行,以及正常数据。这是一个例子..
SELECT category_name, COUNT(files_number)
FROM files
LEFT JOIN categories ON categories.category_id = files.category_id
UNION
SELECT category_name, 0
FROM categories
这将给我一个类似于此的结果集:
category_name | value
----------------------
open file | 0
open file | 23
closed file | 0
有什么方法可以删除重复的零值条目吗?请不要在实际查询中也有复杂的 WHERE 子句,因此最好避免重复。
我不明白你为什么要进行左连接和联合..
您可以执行以下操作以删除重复项、包装您的查询并按
进行分组
;with cte
as
(
SELECT category_name, COUNT(files_number)
FROM files
LEFT JOIN categories ON categories.category_id = files.category_id
UNION
SELECT category_name, 0
FROM categories
)
select categoryname,sum(aggcol)
from cte
group by
category
一种方法是 select 类别 table 中的所有类别,然后 LEFT JOIN 到文件计数(按 category_id 分组)。
SELECT c.category_name, ISNULL(fc.FileCount, 0) AS FileCount
FROM categories c
LEFT JOIN (
SELECT category_id, COUNT(files_number) AS FileCount
FROM files
GROUP BY category_id
) fc ON c.category_id = fc.category_id
编辑
如果你想反转查询,你可以这样做,使用 RIGHT OUTER JOIN - 因此返回类别 table 中的每个类别,无论是否有任何文件:
SELECT c.category_name, COUNT(f.category_id) AS FileCount
FROM files f
RIGHT JOIN categories c ON c.category_id = f.category_id
GROUP BY c.name
我试图解决的原始问题是我需要显示特定 "joined" table 中的所有行。然而,这些有时是空白的,没有总数,通常不会显示(想想每个类别和计数)。
所以我想做的是合并到一个“0 值”数据集以显示所有类别。但是,当我执行合并时,它显示一个 0 值行,以及正常数据。这是一个例子..
SELECT category_name, COUNT(files_number)
FROM files
LEFT JOIN categories ON categories.category_id = files.category_id
UNION
SELECT category_name, 0
FROM categories
这将给我一个类似于此的结果集:
category_name | value
----------------------
open file | 0
open file | 23
closed file | 0
有什么方法可以删除重复的零值条目吗?请不要在实际查询中也有复杂的 WHERE 子句,因此最好避免重复。
我不明白你为什么要进行左连接和联合..
您可以执行以下操作以删除重复项、包装您的查询并按
进行分组;with cte
as
(
SELECT category_name, COUNT(files_number)
FROM files
LEFT JOIN categories ON categories.category_id = files.category_id
UNION
SELECT category_name, 0
FROM categories
)
select categoryname,sum(aggcol)
from cte
group by
category
一种方法是 select 类别 table 中的所有类别,然后 LEFT JOIN 到文件计数(按 category_id 分组)。
SELECT c.category_name, ISNULL(fc.FileCount, 0) AS FileCount
FROM categories c
LEFT JOIN (
SELECT category_id, COUNT(files_number) AS FileCount
FROM files
GROUP BY category_id
) fc ON c.category_id = fc.category_id
编辑 如果你想反转查询,你可以这样做,使用 RIGHT OUTER JOIN - 因此返回类别 table 中的每个类别,无论是否有任何文件:
SELECT c.category_name, COUNT(f.category_id) AS FileCount
FROM files f
RIGHT JOIN categories c ON c.category_id = f.category_id
GROUP BY c.name