簡體   English   中英

SQL select with case when and join table

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM