我无法为以下查询返回所有值,包括重复项:
select all field1, count(field1)
from tablename
where
field2 in (
abc,
abc,
def,
ghi,
ghi
)
group by field1
field2
有超过500个值(邮政编码),我想返回分配给每个field1
(邮政编码)的每个field2
(区域)。如果我运行上面的查询,则返回三个区域(对于邮政编码abc,def,ghi)而不是五个。下面是我正在使用的表格的较小版本;实际的表有~500行。
我列出了数百个邮政编码(field2),这些邮政编码都已分配区域(field1)。例如,如果我输入400个不同的邮政编码(field2),我希望收到400个相应的区域(field1)。截至目前,我只收到与不同邮政编码相对应的区域。
FIELD2 FIELD1
1 66666北
2 77777南
3 88888东
4 99999西
我知道有一个简单的解决方案,但我很难过。我正在使用MS SQL Server;遗憾的是,我没有权限在数据库中创建表。
答案 0 :(得分:4)
您有两个问题。
1 - 您正在使用GROUP BY
,根据定义,它会删除分组字段中的重复行
2 - 您正在使用IN
,这会导致短路。这意味着它忽略了dupes并且只返回一个布尔值。
你可能会尝试类似的东西:
CREATE TABLE t_Field2 (field2 varchar(10))
INSERT INTO t_Field2
VALUES
('abc'....) <insert all your rows here>
SELECT Field1, COUNT(Field1)
FROM MyTable t
INNER JOIN t_Field2 t2
ON t2.field2 = t.field2
GROUP BY Field1
INNER JOIN
肯定会在这种情况下给你欺骗,出于某种原因,这听起来像你想要的那样。
GROUP BY
仍会消除重复的Field1
值。
答案 1 :(得分:0)
不仅仅是这个吗?
SELECT DISTINCT field1, field2
FROM tablename
WHERE field2 IN ( abc, def, ghi )
此外,您的原始查询有一个IN谓词,每个列出“abc”和“ghi”两次。重复没有任何作用; field IN ( abc, abc )
在逻辑上等同于(field = abc OR field = abc)
答案 2 :(得分:0)
我和其他人一样难以理解你要做的事情,但假设你试图提供所有值(包括重复值)的列表和每个出现者的次数,可以用
完成SELECT a.field1, b.CountField
FROM tablename a
INNER JOIN (SELECT Field1, COUNT(*) AS CountField FROM TableName GROUP BY Field1) b
ON a.Field1=b.Field1
但我不能为我的生活理解为什么你只想要那些数据
SELECT Field1, COUNT(*) AS CountField FROM TableName GROUP BY Field1
那么,如果你能澄清你想要达到的目标,或许我们可以提供更多帮助?