Yam*_*088 4 sql-server-2008 sql-server
我正在尝试清理一个丑陋但可以完成工作的查询。我想知道是否可以在 SELECT 语句中创建一个临时变量。我已经谷歌搜索并没有找到任何帮助。基本上我对查询所做的是将 DateTime 字段与当前时间进行比较,以查看日期是过去还是将来。也许我把一些简单的事情复杂化了,但是从互联网上环顾四周,这似乎是比较 DateTime 字段的唯一方法。
我希望能够重用查询的以下重复部分,因为我必须将它们列出两次才能获得下限值:
(CAST(DATEADD(n, bq.markupDelay, sr.lastviewed) AS FLOAT)
Run Code Online (Sandbox Code Playgroud)
和
(CAST(GETDATE() AS FLOAT)
Run Code Online (Sandbox Code Playgroud)
这是查询:
SELECT
bq.quoteID
, bq.unsentNumber
, bq.sendSubsequent
, bq.unsentDelay
, sr.contractorID
, CASE
WHEN (CAST(DATEADD(n, bq.markupDelay, sr.lastviewed) AS FLOAT) - FLOOR(CAST(DATEADD(n, bq.markupDelay, sr.lastviewed) AS FLOAT))) <= (CAST(GETDATE() AS FLOAT) - FLOOR(CAST(GETDATE() AS FLOAT)))
THEN 1
ELSE 0
END AS 'Add Bid'
, DATEADD(n, bq.markupDelay, sr.lastviewed) AS 'Send Time'
, GETDATE() AS 'Time Now'
, e.email
, e.name
FROM tblCustomerBidQueue bq
INNER JOIN tblServiceRecords sr ON bq.QuoteID = sr.cartID AND sr.status = 'Bid' AND bq.status = 'Queued'
INNER JOIN tblContractors c ON c.ID = sr.contractorID
INNER JOIN tblEmails e ON e.custom = bq.QuoteID
WHERE bq.status = 'Queued'
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
是的,你可以为所欲为。它不完全是一个变量,但它的工作原理是一样的。这是您可以使用CROSS APPLY的几种方法之一。
SELECT
bq.quoteID
, bq.unsentNumber
, bq.sendSubsequent
, bq.unsentDelay
, sr.contractorID
, CASE
WHEN (ComputedColumns.MyDateAdd - FLOOR(ComputedColumns.MyDateAdd)) <= ((ComputedColumns.MyDate) - FLOOR(ComputedColumns.MyDate))
THEN 1
ELSE 0
END AS 'Add Bid'
, DATEADD(n, bq.markupDelay, sr.lastviewed) AS 'Send Time'
, GETDATE() AS 'Time Now'
, e.email
, e.name
FROM tblCustomerBidQueue bq
INNER JOIN tblServiceRecords sr ON bq.QuoteID = sr.cartID AND sr.status = 'Bid' AND bq.status = 'Queued'
INNER JOIN tblContractors c ON c.ID = sr.contractorID
INNER JOIN tblEmails e ON e.custom = bq.QuoteID
CROSS APPLY (SELECT CAST(DATEADD(n, bq.markupDelay, sr.lastviewed) AS FLOAT) AS MyDateAdd,
CAST(GETDATE() AS FLOAT) AS MyDate) ComputedColumns
WHERE bq.status = 'Queued'
Run Code Online (Sandbox Code Playgroud)
基本上你CROSS APPLY
你的变量,然后你可以使用它们,就好像它们是表的列一样。
归档时间: |
|
查看次数: |
3827 次 |
最近记录: |