好的,我有这个T-SQL声明:
SELECT
COUNT(DISTINCT RentalNo) as Count
FROM
RoomRental AS rr
LEFT JOIN
RoomLinks AS r
On (r.RoomNo1 = rr.RoomNo OR r.RoomNo2 = rr.RoomNo)
AND r.CostCentreNo = rr.CostCentreNo
WHERE Cancelled = 0
AND (rr.RoomNo = @RN OR r.RoomNo2 = @RN OR r.RoomNo1 = @RN)
AND rr.CostCentreNo = @CCN
AND StartDate = @StartDate
AND DATEADD(minute,0-SetupTime,StartTime) < @EndBlock
AND DATEADD(minute,BreakdownTime,EndTime) > @StartBlock)
我有什么方法可以存储SELECT *
,然后快速(不再应用语句),获取RentalNos
,或将另一个AND
应用于{{ 1}}子句?
请注意,这只是我的SQL查询的一个示例,我现在有一个循环,因为它遍历所有时间块,(首先查询第一个结束后)。
基本上,有很多类似的SQL查询重复。如果我可以存储一次并操纵它,那就太棒了。
干杯,
保
答案 0 :(得分:7)
使用SELECT INTO
并将结果存储在临时表中(#前缀用于临时表)
SELECT yourcols, ...
INTO #table
FROM yourtables...
然后你可以像任何其他物理存储的表一样引用#table,加入它等等。
答案 1 :(得分:2)
您可以通过执行以下操作来创建临时表
SELECT *
INTO #temp_table
FROM etc.
或者具体而言,
SELECT *
INTO #temp_table
FROM RoomRental AS rr LEFT JOIN RoomLinks AS r
ON (r.RoomNo1 = rr.RoomNo OR r.RoomNo2 = rr.RoomNo)
AND r.CostCentreNo = rr.CostCentreNo
WHERE Cancelled = 0
AND (rr.RoomNo = @RN OR r.RoomNo2 = @RN OR r.RoomNo1 = @RN)
AND rr.CostCentreNo = @CCN;
然后,您可以使用
对#temp_table
执行所有查询
SELECT COUNT(DISTINCT RentalNo) as Count
FROM #temp_table
WHERE StartDate = @StartDate
AND DATEADD(minute,0-SetupTime,StartTime) < @EndBlock
AND DATEADD(minute,BreakdownTime,EndTime) > @StartBlock)
对于您要执行的每组日期。
答案 2 :(得分:0)
看看临时表(这里有大量信息和网络的其余部分)。
可以像普通表一样查询和插入它们。