当前位置: 代码迷 >> Sql Server >> SQL查询,依照行值判断显示结果
  详细解决方案

SQL查询,依照行值判断显示结果

热度:98   发布时间:2016-04-24 09:20:12.0
SQL查询,按照行值判断显示结果

roomid      date                   state
101            2015-02-01      已售
101            2015-01-01      未售
参数:@日期
@日期小于02-01时,需要得到结果是:
101            2015-01-01   未售
@日期大于等于02-01时,显示空。

------解决思路----------------------
DECLARE @日期 DATETIME
SET @日期='2015-01-21'
;WITH CTE AS(
SELECT * FROM TB WHERE date<=@日期
)
SELECT T1.*
FROM CTE T1
LEFT JOIN CTE T2 ON T1.roomid=T2.roomid AND T2.STATE='已售'
WHERE T2.roomid IS NULL
类似这样
------解决思路----------------------

DECLARE @日期 DATE = '2015-02-01'
;WITH CTE AS
(
SELECT 101 AS roomid , '2015-02-01' AS date ,'已售' AS STATE
UNION ALL
SELECT 101 AS roomid , '2015-01-01' AS date ,'未售' AS STATE
UNION ALL
SELECT 102 AS roomid , '2015-02-01' AS date ,'未售' AS STATE
UNION ALL
SELECT 102 AS roomid , '2015-01-01' AS date ,'已售' AS STATE
)
SELECT * 
FROM CTE a
WHERE a.date <= @日期
  AND a.STATE = '未售'
  AND NOT EXISTS(SELECT * FROM CTE WHERE roomid = a.roomid 
AND date > a.date
AND date <= @日期)
  相关解决方案