SQL清楚地安排列查询问题

时间:2013-12-31 05:36:52

标签: sql sql-server database sql-server-2008-r2

我有以下表格:

dbPratiche:

enter image description here

在这里我想要[Provincia contraente](第一栏)和[Provincia aconzia]中[Provincia contraente]的计数。

例如

如果我使用以下查询排列不同的拳柱:

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

EDIT2:

还想添加第一列的计数

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]的数量

plz help

3 个答案:

答案 0 :(得分:3)

您应该可以使用group by statement。

select  [Provincia contraente],count([Provincia Agenzia])
from dbPratiche where [Provincia contraente]=[Provincia Agenzia]
group by [Provincia contraente]

答案 1 :(得分:3)

此查询还显示0个值:

SELECT [provincia contraente], 
       Sum(CASE 
             WHEN [provincia contraente] = [provincia agenzia] THEN 1 
            ELSE 0 
           END) 
FROM   dbpratiche 
GROUP  BY [provincia contraente] 

UPD:以下是适用于更新问题的查询:

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

答案 2 :(得分:2)

您不必在此使用distinct。分组已为您获取分组列的唯一值。

试试这个

 select [Provincia contraente], count([Provincia Agenzia])
 from dbPratiche 
 where [Provincia contraente] = [Provincia Agenzia]
 group by [Provincia contraente]