我有一个表“Cinema”,其中Cinema_ID为我的PK,所有座位为数据类型位的列(1 =已预订,0 =可用),例如。 Cinema_ID,A1,A2,A3,A4,A5,B1,B2,B3,B4,B5,......,E5。是否可以仅计算行值为1的列?
答案 0 :(得分:0)
select
cinema_id,
sum(case when A1=1 then 1 when A2=1 then 1 ... end) as counts from Cinema
group by cinema_id
答案 1 :(得分:0)
除了@GriGrim关于设计的说法,您可以将位值转换为数字,然后添加结果:
SELECT ID, CONVERT(int, Bit1) + CONVERT(int, Bit2) + CONVERT(int, Bit3) BookedSeats FROM tblTemp
这将有效,因为true
的所有位值都表示为1
,而false
的所有值都是0
。
当然,由于座椅数量很多,这几乎无法维持,所以如果您可以自由地将设计标准化,那么您应该选择使用此选项。