1

我想完成这样的事情:

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 数据总计

009--------41000---10

029--------42000---50

A19--------42300---40

ProgramacaoBarcas

ViagemId 数据 TSFechamento

009--------41000-10/05/2013

019--------42000-空

B49--------13000-11/05/2013

InsercaoManual

ViagemId 数据 TSFechamento

009--------21000-空

0D9--------42000-NULL

A19--------42300-10/05/2013

预期成绩:

ViagemId 数据总计

009--------21000-10

A19--------42300-40

我想从表X(QtdEmbarcados.Total)中检索一些结果,这些结果必须在我从表 A 和 B(ViagemIDData,PK)获得的范围内。所以,我阅读QtdEmbarcados,检查结果是否存在于表中Retorno(A 和 B 联合),然后返回。但是我在转换行“Incorrect sintax near (".

有什么帮助吗?

编辑:刚刚插入了一个例子。想要得到的结果QtdEmbarcados是第 1 行(存在于表中ProgramacaoBarcas)和第 3 行(存在于表中InsercaoManual)。我认为在 union ProgramacaoBarcasand InsercaoManual(same shema) 和 where 子句中使用这些结果。

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

谢谢 !

4

1 回答 1

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
于 2013-05-15T17:24:50.547 回答