我想完成类似的事情:
SELECT QtdEmbarcados.Total FROM QtdEmbarcados, ProgramacaoBarcas
WHERE (
(SELECT * FROM
(
SELECT ProgramacaoBarcas.ViagemID, ProgramacaoBarcas.Data, ProgramacaoBarcas.TSFechamento FROM ProgramacaoBarcas
WHERE CONVERT(DATE, ProgramacaoBarcas.TSFechamento) = CONVERT(DATE, GETDATE())
UNION
SELECT InsercaoManual.ViagemID, InsercaoManual.Data, InsercaoManual.TSFechamento FROM InsercaoManual
WHERE CONVERT(DATE, InsercaoManual.TSFechamento) = CONVERT(DATE, GETDATE())
) Retorno)
QtdEmbarcados.ViagemID = Retorno.ViagemID AND QtdEmbarcados.Data = Retorno.Data)
示例表:
QtdEmbarcados
ViagemId数据总计
<00> 009 ------ 41000 --- 10029 ------ --- 42000 50
A19 ------ --- 42300 40
ProgramacaoBarcas
ViagemId Data TSFechamento
009 ------ 41000-10 / 05/2013
019 ------ 42000-NULL
B49 ------ 13000-11 / 05/2013
InsercaoManual
ViagemId Data TSFechamento
009 ------ 21000-NULL
0D9 ------ 42000-NULL
A19 ------ 42300-10 / 05/2013
预期结果:
ViagemId数据总计
009 ------ 21000-10
A19 ------ 42300-40
我想从表X(QtdEmbarcados.Total)
中检索一些结果,其中这些结果必须在我从表A和B(ViagemID
和Data
,PKs)获得的范围内。
所以,我读了QtdEmbarcados
,检查表Retorno
(A和B联合)中是否存在结果,然后返回。
但我在转换行“错误的sintax附近(”。
有任何帮助吗?
编辑:刚刚插入了一个示例。想要从QtdEmbarcados
获得的结果是第1行(存在于表ProgramacaoBarcas
中)和3(存在于表InsercaoManual
中)。
我想在联合ProgramacaoBarcas
和InsercaoManual
(同样的shema)和where子句中使用这些结果。
对不起,如果做了一些废话。我是SQL的新手。
谢谢!
答案 0 :(得分:2)
试试这个 -
DECLARE @curr_date DATE = GETDATE()
SELECT q.Total
FROM dbo.QtdEmbarcados q
JOIN dbo.ProgramacaoBarcas r ON q.ViagemID = r.ViagemID AND q.Data = r.Data
JOIN (
SELECT p.ViagemID, p.Data, p.TSFechamento
FROM dbo.ProgramacaoBarcas p
WHERE CONVERT(DATE, p.TSFechamento) = @curr_date)
UNION
SELECT i.ViagemID, i.Data, i.TSFechamento
FROM dbo.InsercaoManual i
WHERE CONVERT(DATE, i.TSFechamento) = @curr_date)
) t ON q.ViagemID = t.ViagemID AND q.Data = t.DATA AND ... -- <-- your WHERE clause