WHERE子句中的SQL递归参数

时间:2018-04-24 06:19:44

标签: sql sql-server

我正在尝试获取使用3列中的连接值作为WHERE子句参数的数据。这可能吗?

set_start_method('spawn')

OR

SELECT [Less Total Backlog QTY] - Daily_Capacity FROM b WHERE
PrimaryKey in (select concat_value from b)

我使用了第二个,但没有结果。但是当我尝试

SELECT [Less Total Backlog QTY] - Daily_Capacity FROM b WHERE
PrimaryKey = CONCAT(tmp_date,Plant,FamilyName)

我得到了所需的输出。 我只需要将它应用于所有行。

我想要完成的是计算总积压数量列 公式为总积压数量(前一天) - Daily_Capacity
因此,对于 NewDate 17/04/2018 总积压数量的值将为 375654 。 (381,654 - 600)

等等..

示例数据:

enter image description here

3 个答案:

答案 0 :(得分:0)

SELECT [Less Total Backlog QTY] - Daily_Capacity FROM b WHERE
PrimaryKey = CONCAT(tmp_date,Plant,FamilyName)

肯定会有效。

CONCAT函数将三个值组合成一个值。

可能是您的主键列没有该值

答案 1 :(得分:0)

在您的示例数据中:

PrimaryKey来自NewDate,Plant和FamilyName的串联。

SELECT [Less Total Backlog QTY] - Daily_Capacity FROM b WHERE PrimaryKey = CONCAT(CONVERT(date,NewDate,120),Plant,FamilyName)

语法:CONVERT(data_type(length),expression,style) 对于您可以使用的样式120,请参阅此链接以供参考:https://www.w3schools.com/sql/func_sqlserver_convert.asp

答案 2 :(得分:0)

如果您的tmp_date不是有效的DATE数据类型,那么CONVERT将其转换为DATE并尝试以下操作。

试试这个:

SELECT [Less Total Backlog QTY] - Daily_Capacity 
FROM b 
WHERE PrimaryKey = CONCAT(CONVERT(date, tmp_date, 105),Plant,FamilyName) 

将VARCHAR更改为DATE格式:

DECLARE @tab TABLE(tmp_date DATETIME,Plant VARCHAR(10),FamilyName VARCHAR(10))
INSERT INTO @tab VALUES ('16-04-2018','CMKK','B113')

SELECT CONCAT(CONVERT(date, tmp_date, 105),Plant,FamilyName)Concat_date_Value 
FROM @tab

<强> 输出

Concat_date_Value
2018-04-16CMKKB113