我在MVC5 C#中有一个应用程序.我想添加一个功能,管理员可以看到每个停车场有多少个停车位,以及目前有多少车位可用.

比方说,我有两张桌子(地段和员工).

"停车场"表是现有停车场的名称以及每个停车场的车位数:

Name | Count
A    |  200
B    |  450
C    |  375

"Staff"表包含每个人的ID,以及每个批次的int列.这些列为1(员工分配给该批次)或0(员工未分配给该批次)

StaffID    |    LotA    |    Lot B    |    Lot C
7264       |      0     |       1     |      0
2266       |      0     |       0     |      1
3344       |      1     |       0     |      0
4444       |      0     |       1     |      0

在上述场景中,所需的输出将是.

 Lot |   Total |   Used   |  Vacant
  A  |     200 |    1     |   199
  B  |     450 |    2     |   448
  C  |     375 |    1     |   374   

在过go ,我只做过简单的连接,我正在努力弄清楚使用COUNT和Where column=1还是Sum是最好的.但我也被这群人噎住了,迷路了.

我try 过以下类似的变化(没有成功)

SELECT Lots.Name,
       Lots.Count,
       SUM(Staff.LotA) As A_Occupied,
       SUM(Staff.LotB) as B_Occupied,
       SUM(Staff.LotC) as C_Occupied
FROM Lots
     CROSS JOIN Staff
GROUP BY Lots.Name

理论上,我希望这会产生一个地块列表,每个地块中有多少个空间,每个地块中有多少个被占用,按地块名称分组.

这会在Group By中生成一个错误,因为我 Select 的列不包括在Group By中,但这会让我更加困惑如何根据自己的需要进行分组.

总的来说,我有一个坏习惯,试图把事情复杂化,所以我提前道歉.我不是一个"受过classic 训练的程序员".我尽了最大努力组织这个问题,让它变得易懂

推荐答案

首先,如果它是normalised,你的设计会更好——你的Staff表应该有一个代表每个工作人员使用的批次的单列(如果你有Staff个批次,你会有Staff列吗?).这样就不需要将数据从列转向所需的行.

在当前模式下,可以使用cross apply将列旋转成行,然后将这些行与每个批次名称关联:

select l.[name] as Lot, q.Qty as Used, l.count - q.Qty as Vacant
from lots l
cross apply (
  select Sum(LotA) A, Sum(LotB) B, Sum(LotC) C
  from Staff s 
)s
cross apply (
  select Qty from (
    select * from (values ('A', s.A),('B', s.B),('C', s.C))v(Lot, Qty)
  )x
  where x.Lot = l.[name]
)q;

Demo Fiddle

Sql相关问答推荐

LAG函数通过丢弃空值返回前一行

用于匹配红旗和绿旗的SQL查询

在SQL中将相同且紧挨着的元素进行分组

在Golang中管理数据库事务的简洁方法

Postgres trunc_date删除一个月

雅典娜嵌套Json提取液

PostgreSQL:使用JSONB中的字段使用jsonb_to_Records()填充记录

值对于类型字符来说太长

如何使用SQL Server中的Nodes()方法执行与OPENXML相同的操作

在Power Bi中将SQL代码转换为DAX

SQL:如果一个表中的日期在另一个表的日期的12个月内,则为是或否

使用递归CTE在BigQuery中获取文件路径

如何使用聚合连接两个表

在SQL中转换差异表的多列

每个分组最多 Select 最后 2 个值并并排显示它们

如何根据 SQL 中的阈值标记一个集群中的所有值?

使用 union 的有序结果获取行数

Oracle PL/SQL长期运行问题

连续期间的缺口

SQL查询以获取从特定可变日期看到的用户