簡體   English   中英

在SQL中返回所有值(包括重復項)

[英]Returning All Values (Including Duplicates) in SQL

我無法為以下查詢返回所有值,包括重復項:

select all field1, count(field1)
from tablename
where
  field2 in (
    abc,
    abc,
    def,
    ghi,
    ghi
  )
group by field1

field2 (郵政編碼)有500多個值,我想返回分配給每個field2 (郵政編碼)的每個field1 (區域)。 如果我運行上述查詢,則返回三個區域(對於郵政編碼abc,def和ghi),而不是五個。 下面是我正在使用的表格的較小版本; 實際表有約500行。

我列出了數百個郵政編碼(field2),這些郵政編碼都已分配了區域(field1)。 例如,如果我輸入400個不同的郵政編碼(字段2),我希望接收它們的400個對應區域(字段1)。 到目前為止,我只收到與不同郵政編碼對應的區域。

field2 field1
1 66666北
2 77777南
3 88888東
4 99999西

我知道有一個簡單的解決方案,但是我很沮喪。 我正在使用MS SQL Server; 不幸的是,我沒有在數據庫中創建表的權限。

你有兩個問題。

1-您正在使用GROUP BY ,根據定義, GROUP BY會刪除分組字段中的重復行

2-您正在使用IN ,這會使電路短路。 這意味着它將忽略重復項,僅返回布爾值。

您可能應該嘗試類似的方法:

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值。

不僅僅是這個嗎?

SELECT DISTINCT field1, field2 
  FROM tablename
 WHERE field2 IN ( abc, def, ghi )

同樣,您的原始查詢具有一個IN謂詞,其中每個謂詞兩次列出“ abc”和“ ghi”。 重復無濟於事。 field IN ( abc, abc )在邏輯上等效於(field = abc OR field = abc)

對於您要嘗試的工作,我和其他人一樣感到沮喪,但是假設您要提供所有值的列表(包括重復項)和每個出現次數,它可以完成

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

因此,如果您可以闡明要達到的目標,也許我們可以提供更多幫助?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM