[英]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.