在SQL中返回所有值(包括重复项)

时间:2011-12-20 21:48:57

标签: sql sql-server tsql

我无法为以下查询返回所有值,包括重复项:

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;遗憾的是,我没有权限在数据库中创建表。

3 个答案:

答案 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

那么,如果你能澄清你想要达到的目标,或许我们可以提供更多帮助?

相关问题