[英]SQL select with case when and join table
我在 sql (postgresql) 中有 2 個表
表1:
日期 | 室友 | 斯托克 |
---|---|---|
2021-03-15 | A01 | 3 |
2021-03-16 | A01 | 3 |
2021-03-17 | A01 | 3 |
表2:
預訂代碼 | 開始日期 | 結束日期 | 室友 |
---|---|---|---|
B001 | 2021-03-15 | 2021-03-17 | A01 |
我的語法是這樣的
select dates, tbl1.roomid,
case
when dates between startdate and enddate - integer '1' then stok -1
else stok
end stok
from tbl1
join tbl2
on tbl1.roomid = tbl2.roomid order by dates asc
當預訂數量為 1 (tbl2)時,它匹配這樣的結果。 結果是正確的
日期 | 室友 | 斯托克 |
---|---|---|
2021-03-15 | A01 | 2 |
2021-03-16 | A01 | 2 |
2021-03-17 | A01 | 3 |
但是當booking是2的時候,是這樣的(tbl2)
預訂代碼 | 開始日期 | 結束日期 | 室友 |
---|---|---|---|
B001 | 2021-03-15 | 2021-03-17 | A01 |
B002 | 2021-03-15 | 2021-03-17 | A01 |
結果是這樣的,結果不合適
日期 | 室友 | 斯托克 |
---|---|---|
2021-03-15 | A01 | 2 |
2021-03-15 | A01 | 2 |
2021-03-16 | A01 | 2 |
2021-03-16 | A01 | 2 |
2021-03-17 | A01 | 3 |
2021-03-17 | A01 | 3 |
預訂2時我想要的結果是這樣的
日期 | 室友 | 斯托克 |
---|---|---|
2021-03-15 | A01 | 1 |
2021-03-16 | A01 | 1 |
2021-03-17 | A01 | 3 |
任何人都可以提出解決方案嗎?
如果您需要更新數據庫,只需執行
UPDATE tbl1 SET stok = stok - (SELECT COUNT(*) FROM tbl2 WHERE tbl1.roomid = tbl2.roomid AND tbl1.dates >= tbl2.startdate AND tbl1.dates < tbl2.enddate);
否則做
SELECT dates, roomid, stok - (SELECT COUNT(*) FROM tbl2 WHERE tbl1.roomid = tbl2.roomid AND tbl1.dates >= tbl2.startdate AND tbl1.dates < tbl2.enddate) FROM tbl1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.