【发布时间】:2017-01-30 15:31:58
【问题描述】:
我有一个查询,其中包含我们工厂的所有发货和成本。 Google Drive 上的示例数据和所需输出:
https://drive.google.com/open?id=0B4xdnV0LFZI1VndEaGgxNDVpU2M
问题是我们有两种不同的销售方式。一个是我们制造的“Regluar”,另一个是我们买卖它的“买/卖”。
为了获取成本,我必须编写两个查询,每个场景一个。此查询的最终用户可以输入一个日期范围,然后查询运行良好,但是当涉及到变量 @Job_No 时我被卡住了。
通过我们工厂 (cteRegularJobs) 的所有工作都有一个与之关联的工作编号,并且我声明了一个变量,以便用户可以使用它进行搜索。 cteBuyandSell 在 SELECT 语句中声明的 Job_No 的值为“NULL”,因此我可以在最后对这两个表进行 UNION。但是,没有任何购买/销售工作分配有工作编号,它们始终为 NULL。
最初@Job_No 被声明为'',当它离开时''我希望返回两个cte 表的结果。如果用户有一个条目,即“001”,那么我想要 cteRegularJobs 的结果。
如果它更容易,我愿意声明 cteBuyandSell.Job_No 除了 NULL 之外的其他内容,例如“Buy and Sell”。
真正的查询很复杂,所以这里有一个简化的结构示例:
DELCARE @Job_No AS varchar(10) = '';
SET @Job_No = {User Input or leave as ''};
WITH
cteBuyandSell AS ( NULL AS 'Job_No',
...),
cteRegularJobs AS (tblJobs.Job_No AS 'Job_No',
...
WHERE tblJobs.Job_No LIKE @Job_No)
SELECT *
FROM
(cteBuyandSell
UNION
cteRegularJobs)
【问题讨论】:
-
我认为样本数据和期望的结果确实有助于解释你在做什么。根据您的描述,CTE 永远不应返回任何行,因为
tblJobs.Job_No在该表中为 NULL - 如果一个操作数为NULL,LIKE永远不会返回 true。 -
@GordonLinoff,谢谢你的建议。更新了带有示例数据链接的问题。
标签: sql sql-server tsql variables common-table-expression