我有一个包含两列的表:表和时间。 存储的数据可能是这样的:
|TABLES|TIME |
--------------
| 1 |19:00|
| 1 |20:00|
| 1 |22:00|
| 2 |21:00|
| 3 | null|
| 4 |20:00|
我想知道在桌子上是否与给定时间相关(返回1),如果没有,如果它在另一时间可用(返回0)或者它是否根本不可用(返回 - 1)。
例如,如果我想在" 20:00"我应该得到:
|TABLES|RESULT|
--------------
| 1 | 1 |
| 2 | 0 |
| 3 | -1 |
| 4 | 0 |
我试过这个,但它说"错误:没有这样的专栏:tab"。 有人能帮助我吗?
SELECT
tab,
(SELECT CASE
WHEN (SELECT Count() FROM reg_book WHERE tables=tab AND time ="20:00") !=0
THEN 1
WHEN (SELECT Count() FROM reg_book WHERE tables=tab) !=0
THEN 0
ELSE -1 END
)
from (SELECT tables FROM reg_book) as tab;
PD:我已经检查了下面的另一个问题,但没有工作......
How to reuse a result column in an expression for another result column
答案 0 :(得分:0)
tab
是子查询(虚拟表)的名称,而不是列的名称。
该列的名称为tab.tables
:
SELECT
tab.tables,
(SELECT CASE
WHEN (SELECT Count() FROM reg_book WHERE tables=tab.tables AND time ="20:00") !=0
THEN 1
WHEN (SELECT Count() FROM reg_book WHERE tables=tab.tables) !=0
THEN 0
ELSE -1 END
)
from (SELECT tables FROM reg_book) as tab;
就此而言,将简单的SELECT ... FROM包装到子查询中是多余的:
SELECT
tab.tables,
(SELECT CASE
WHEN (SELECT Count() FROM reg_book WHERE tables=tab.tables AND time ="20:00") !=0
THEN 1
WHEN (SELECT Count() FROM reg_book WHERE tables=tab.tables) !=0
THEN 0
ELSE -1 END
)
FROM reg_book AS tab;