我有以下查询:
SELECT
[ID], [DESCRIPCION], [EZD]
FROM
[KPTA_WEB_VW_COMBOS]
WHERE
[EZD] = '0000128460'
AND [EZD] IN (SELECT DISTINCT Cod_EZD, Cod_Combo
FROM KPTA_REP_Venta
WHERE Id_Dia BETWEEN CAST(CONVERT(VARCHAR(8),DATEADD(MONTH, -200, GETDATE()),112) AS INT)
AND CAST(CONVERT(VARCHAR(8),GETDATE(),112) AS INT)
)
GROUP BY
[ID], [DESCRIPCION], [EZD]
现在我有两个问题,IN
处理WHERE
这样写的[ID]
条款,我需要对IN
列做同样的事情,但我不能这样做在相同的KPTA_WEB_VW_COMBOS
中使用它,有什么方法可以做到吗?
只有在[ID]
和[EZD]
列与KPTA_REP_Venta
表匹配时,才会仅提供JOIN
表的信息。我不想使用GROUP BY
因为我不需要数据,我只是想知道这两个列中是否存在这两个列的组合并返回其中的内容。 SELECT
[ID],[DESCRIPCION],[EZD]
FROM
[KPTA_WEB_VW_COMBOS] A
WHERE
[EZD] = '0000128460' --@EZD
AND EXISTS
(SELECT TOP 1 1
FROM
KPTA_REP_Venta B
WHERE
B.Id_Dia BETWEEN
CAST(CONVERT(VARCHAR(8),DATEADD(MONTH, -200, GETDATE()),112) AS INT) AND CAST(CONVERT(VARCHAR(8),GETDATE(),112) AS INT)
AND A.[EZD]= b.[Cod_Ezd]
AND A.[ID] = b.[Cod_Combo]
)
GROUP BY [ID],[DESCRIPCION],[EZD]
条款。
编辑: 搜索完之后我改变了我的初始查询:
library()
答案 0 :(得分:2)
您似乎正在寻找类似这样的内容,而不是单个列,但是应该在子查询中找到列的列表:
select id, descripcion, ezd
from kpta_web_vw_combos
where (ezd, id) in
(
select cod_ezd, cod_combo
from kpta_rep_venta
where id_dia between
cast(convert(varchar(8),dateadd(month, -200, getdate()),112) as int) and
cast(convert(varchar(8),getdate(),112) as int)
);
这就是许多DBMS中的donme,我很确定它是标准的SQL,但是SQL Server没有这种语法。
所以用EXISTS重写这个,正如你已经猜到的那样:
select id, descripcion, ezd
from kpta_web_vw_combos c
where exists
(
select *
from kpta_rep_venta v
where v.id_dia between
cast(convert(varchar(8),dateadd(month, -200, getdate()),112) as int) and
cast(convert(varchar(8),getdate(),112) as int)
and v.cod_ezd = c.ezd
and v.cod_combo = c.id
);