Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按状态获取每个位置的计数_Sql_Sql Server_Join - Fatal编程技术网

Sql 按状态获取每个位置的计数

Sql 按状态获取每个位置的计数,sql,sql-server,join,Sql,Sql Server,Join,我有两个名为QueueTable和Location的表 QueueTable数据如下所示 QueueID FkBranchID AddedTime Status 11001 10 2019-07-02 5 11002 10 2019-07-03 5 11003 10 2019-07-04 6 11004 10 2019-07-05 5 11005 20 2019-07-06

我有两个名为
QueueTable
Location
的表

QueueTable
数据如下所示

QueueID FkBranchID  AddedTime   Status
11001           10  2019-07-02  5
11002           10  2019-07-03  5
11003           10  2019-07-04  6
11004           10  2019-07-05  5
11005           20  2019-07-06  6
11006           20  2019-07-07  5
11007           20  2019-07-08  6
11008           20  2019-07-09  6
11009           20  2019-07-10  5
11010           30  2019-07-11  5
11011           30  2019-07-12  6
11012           30  2019-07-13  5
11013           30  2019-07-14  6
11014           30  2019-07-15  5
11015           40  2019-07-16  5
11016           40  2019-07-17  5
11017           40  2019-07-02  5
11018           40  2019-07-03  5
11019           40  2019-07-04  6
11020           50  2019-07-05  5
11021           50  2019-07-06  5
11022           50  2019-07-13  6
位置
表格数据如下

BranchID    BranchName
10          Delhi
20          Karnataka
30          Telangana
40          Gujarat
50          Tamil Nadu
现在我需要通过连接表来检索以下输出

我试过这个问题,我知道还有更多的错误,如何解决这个问题

select b.BranchId AS ID, b.BranchName,count(lo.QueueID) as Count1 
from Location b
left outer join
(
select br.BranchId,l.QueueID 
from QueueTable l
LEFT OUTER join Location br 
on l.FkBranchId = br.BranchId
where  l.IsActive = 1
GROUP BY l.QueueID) lo on lo.BranchId = b.BranchId
但它抛出了一个错误

列“Branch.BranchId”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

试试这个-

SELECT L.BranchID,
L.BranchName,
COUNT(CASE WHEN Status = 5 THEN 1 ELSE NULL END) [Count1(5)], 
COUNT(CASE WHEN Status = 6 THEN 1 ELSE NULL END) [Count2(6)]
-- You can add more Column here based on Number of Status you have.
FROM Location L
LEFT JOIN QueueTable Q ON L.BranchID = Q.FKBranchID
WHERE Q.IsActive = 1
GROUP BY L.BranchID,L.BranchName

连接表,按BranchHid分组,BranchName使用CASE语句有条件地计算出现的5和6:

select 
  l.BranchId AS ID, 
  l.BranchName,
  count(case q.Status when 6 then 1 end) as Count1,
  count(case q.Status when 5 then 1 end) as Count2  
from Location l left join QueueTable q
on l.BranchId = q.FkBranchId
where l.IsActive = 1
group by l.BranchId, l.BranchName

一个简单的方法是:

select
     a.branchid,
     a.branchname,
     (select count(*) from queuetable where fkbranchid=a.branchid and status=5) status_5_count,
     (select count(*) from queuetable where fkbranchid=a.branchid and status=6) status_6_count

from
     location a
您可以在此服务器上实时执行此查询

使用动态查询来统计
状态
,特别是当它是动态的时候

DECLARE @col VARCHAR(1000)
DECLARE @sql VARCHAR(2000)

SELECT @col = COALESCE(@col + ', ','') + QUOTENAME(CAST([status] AS VARCHAR))
FROM #QueueTable
GROUP BY [status]

SET @sql = '
select BranchID, BranchName, ' + @col + '
from (
    select l.BranchID, l.BranchName, FkBranchID, q.status
    from #Location l 
    join #QueueTable q on q.FkBranchID=l.BranchID)p
PIVOT(COUNT(FkBranchID) FOR status IN ( ' + @col + ' )
) AS pvt
ORDER BY BranchID'

PRINT @sql
EXEC (@sql)
输出

BranchID    BranchName  5   6
10          Delhi       3   1
20          Karnataka   2   3
30          Telangana   3   2
40          Gujarat     4   1
50          Tamil Nadu  2   1

请不要以图片的形式发布数据,除非你希望志愿者转录数据,否则这些数据对你寻求帮助的人几乎毫无用处。请花点时间将数据以表格格式
文本
,或DDL和DML语句的形式发布。谢谢。@Larnu对不起,先生,我再也不会这样做了,你能帮我解决这个问题吗“我有三个表,分别是
QueueTable
Location
,”第三个是什么?您只提供了2个表和预期结果。当然,但我需要可以使用的格式的数据;我不能使用图像,所以我帮不了你。谢谢。请定义“但它不起作用”。你有错误吗?还是别的什么?除了5和6之外还有其他状态吗?如果有更多的状态而不仅仅是5和6呢?另外,您不认为这是一个
左连接吗?OP的预期输出表明他/她只需要计算5和6个。@mkRabbani这是没有错误的,但是如果没有位置,它不在队列表中,它不会返回,如果位置没有映射到队列表,我需要显示它的计数列zeros@Adam脚本已更新。@mkRabbani我在QueueTable中有
IsActive
列,那么我需要检查它的值,并且只有在
IsActive=1
时才可以检索,我如何也检查QueueTable的IsActive状态?我在位置表中有另一个名为
IsActive
的列,我只需要检索其中的
IsActive=1
我该如何做也正好相反
IsActive
在QueueTable中也有,然后我还需要检查它的值,我该如何检查
QueueTable
IsActive状态呢?
其中l.IsActive=1和q.IsActive=1
当我按原样添加它时,没有行减少,它不会发生。只有计数可以减少,但行不能减少,我想我需要在这里检查它
(情况q.状态当6时,则1结束)
我可以在那里检查isActive吗?
情况q.状态当6和q.IActive=1时,则1结束
我可以用作此项吗?原因是什么,你能解释我的原因吗?它特别有用,当新的状态出现在你的表中时,你不需要改变查询来显示它的计数,上面的动态代码也会考虑这个新的状态。