現在有表A 資料如下
id price pricedate priceno pricetype
1 10 2019-12-30 10001 1
2 20 2019-12-30 10001 2
3 5 2019-12-30 10002 2
4 15 2019-12-30 10003 2
4 10 2019-12-04 10003 1
想獲取資料 相同的priceno 如果pricedate 沒有超過當前日期就選擇pricetype=1的資料 相反選擇pricetype=2的資料
id price pricedate priceno pricetype
1 10 2019-12-30 10001 1
3 5 2019-12-30 10002 2
4 15 2019-12-30 10003 2
uj5u.com熱心網友回復:
沒人回復嗎、uj5u.com熱心網友回復:
列舉的模擬資料不對我看到你列的內容,第一種思考方式是,將表A拆分,新建基礎價格表 M 欄位為(price,priceno,pricetype),資料表 T,欄位為(id,pricedate,priceno)
然后聯合查詢,這樣得出的結果再distinct
if not object_id(N'Tempdb..#A') is null
drop table #A
CREATE TABLE #A(id INT IDENTITY,price DECIMAL(18,2),pricedate DATE ,priceno NVARCHAR(10),pricetype INT)
INSERT INTO #A(price,pricedate,priceno,pricetype)
VALUES
(10 , '2019-12-30', '10001' , 1),
(20 , '2019-12-30', '10001', 2),
(5 , '2019-12-30', '10002' , 2),
(15 , '2019-12-30', '10003', 2),
(10 , '2019-12-04', '10003', 1)
if not object_id(N'Tempdb..#M') is null
drop table #M
--創建基礎價格表
CREATE TABLE #M(price DECIMAL(18,2),priceno NVARCHAR(10),pricetype int)
INSERT INTO #M(price,priceno,pricetype)
SELECT price,priceno,pricetype FROM #A
--創建基礎資料表
if not object_id(N'Tempdb..#N') is null
drop table #N
CREATE TABLE #N(pricedate DATE,priceno NVARCHAR(10))
INSERT INTO #N(pricedate,priceno)
SELECT pricedate,priceno FROM #A
--得出結果
SELECT DISTINCT * FROM #N A LEFT JOIN #M B ON A.priceno=B.priceno
WHERE (pricedate>'2019-12-30'AND pricetype=2)
OR (pricedate<='2019-12-30'AND pricetype=1)
第二種方式更簡單,但我覺得不是你想要的
直接在表A上查詢
SELECT * FROM #A
WHERE (pricedate>'2019-12-30' AND pricetype=2)
OR (pricedate<='2019-12-30' AND pricetype=1)
uj5u.com熱心網友回復:
不是我想要的。我就一個表。。你的第二種方法也不對,我自己寫出來了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/94733.html
標籤:基礎類
上一篇:一個更新sql
下一篇:做一個系統
