联盟里面哪里

时间:2013-05-15 13:51:49

标签: sql sql-server sql-server-2012

我想完成类似的事情:

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 --- 10

029 ------ --- 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(ViagemIDData,PKs)获得的范围内。 所以,我读了QtdEmbarcados,检查表Retorno(A和B联合)中是否存在结果,然后返回。 但我在转换行“错误的sintax附近(”。

有任何帮助吗?

编辑:刚刚插入了一个示例。想要从QtdEmbarcados获得的结果是第1行(存在于表ProgramacaoBarcas中)和3(存在于表InsercaoManual中)。 我想在联合ProgramacaoBarcasInsercaoManual(同样的shema)和where子句中使用这些结果。

对不起,如果做了一些废话。我是SQL的新手。

谢谢!

1 个答案:

答案 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