SQL中的“distinct”关键字在对列进行排序时出现问题。

3

我有以下表格:

dbPratiche :

enter image description here

我想要以不同的 [Provincia contraente](第一列)排列,并计算该 [Provincia contraente] 出现在 [Provincia Agenzia] 中的次数。

例如:

如果我使用以下查询将第一列排列为不同值:

select distinct([Provincia contraente]) from dbPratiche

接下来想在下一列中给出它到达第二列[Provincia Agenzia]的次数。

简单来说,原型查询:

SELECT DISTINCT( [provincia contraente] ), 
               Count([provincia agenzia]) 
FROM   dbpratiche 
WHERE  Distinct([provincia contraente]) = [provincia agenzia] 

当然,这个查询会失败,但我使用连接进行了第二个查询,如下所示:
SELECT DISTINCT( p1.[provincia contraente] ) AS 'PC', 
               Count(p2.[provincia agenzia]) 
FROM   dbpratiche p1 
       INNER JOIN dbpratiche p2 
               ON p1.[provincia contraente] = p2.[provincia contraente] 
                  AND p2.[provincia agenzia] = p1.[provincia contraente] 
GROUP  BY p1.[provincia contraente] 

但是没有给我正确的结果。

请帮帮我。

实际表格:

Provincia contraente  |  Provincia Agenzia

TA                          TA

CE                          TA

CE                          CE

MI                          FR

MI                          TA

FR                          FR

期望的结果:

Provincia contraente  |  Provincia Agenzia

TA                          3

CE                          1

MI                          0

FR                          2

编辑2:

还想添加第一列的计数

Provincia contraente  |  Provincia Agenzia  | cnt Provincia contraente

TA                          3                      1

CE                          1                      2

MI                          0                      2

FR                          2                      1

我尝试过:

我按照@verex的查询方法添加了COUNT(dbPratiche.[Provincia contraente]),代码如下:

SELECT T1.[provincia contraente], 
       Count(dbpratiche.[provincia agenzia]), 
       Count(dbpratiche.[provincia contraente]) 
FROM   dbpratiche 
       RIGHT JOIN (SELECT DISTINCT [provincia contraente] 
                   FROM   dbpratiche) AS T1 
               ON dbpratiche.[provincia agenzia] = T1.[provincia contraente] 
GROUP  BY T1.[provincia contraente] 

但是我得到了[Provincia Agenzia]的数量。

请帮忙。

3个回答

3
你应该能够使用group by语句。
select  [Provincia contraente],count([Provincia Agenzia])
from dbPratiche where [Provincia contraente]=[Provincia Agenzia]
group by [Provincia contraente]

你能否更新你的问题,以表明所需的结果是什么。 - Robbert

3
此查询也显示0值:
SELECT [provincia contraente], 
       Sum(CASE 
             WHEN [provincia contraente] = [provincia agenzia] THEN 1 
            ELSE 0 
           END) 
FROM   dbpratiche 
GROUP  BY [provincia contraente] 
更新:这里是已更新问题的可用查询:
SELECT T1.[provincia contraente], 
       Count(dbpratiche.[provincia agenzia]), 
       Max(T1.cnt) 
FROM   dbpratiche 
       RIGHT JOIN (SELECT [provincia contraente], 
                          Count(*) AS Cnt 
                   FROM   dbpratiche 
                   GROUP  BY [provincia contraente]) AS T1 
               ON dbpratiche.[provincia agenzia] = T1.[provincia contraente] 
GROUP  BY T1.[provincia contraente] 

SQLFiddle demo


@LOLSinger:我已经修改了查询。在此处查看sqlfiddle演示 - valex

2
你不必在这里使用distinct。分组已经为你获得了分组列的唯一值。
试试这个。
 select [Provincia contraente], count([Provincia Agenzia])
 from dbPratiche 
 where [Provincia contraente] = [Provincia Agenzia]
 group by [Provincia contraente]

忘记删除了。现在检查一下。 - EfrainReyes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接