2015-01-13 2 views
0

Вот мой запрос:ms sql help help. подзапрос возвращает более чем 1 значение

SELECT   
     Bills.BillDate, 
     Client.ClientName, 
     (SELECT bills.NetAmount 
      FROM Bills 
      Where Bills.BillDate Between DATEADD(day, -30, GETDATE()) AND GETDATE()) as '30 days' 
FROM Client INNER JOIN 
     Vessel ON Client.ClientID = Vessel.ClientID INNER JOIN 
     Bills ON Vessel.VesselID = Bills.VesselID 
     GROUP BY Bills.BillDate, Client.ClientName 
+0

Вашего третьего столбца '30 days' вернулся более 1 результат. –

+0

Предупреждение: использование GETDATE() подобно тому, что позволит вам использовать любой индекс. Я предлагаю рассчитать дату в переменной перед ее выбором и использовать. –

+0

Я хочу выбрать все [netamount] из [clientname], где [BillDate] приходится на сегодняшний день минус 30 дней. спасибо – Cored

ответ

0

Используйте это:

SELECT 
    Bills.BillDate, 
    Client.ClientName, 
    (
     SELECT TOP 1 bills.NetAmount 
     FROM Bills 
     WHERE 
      Bills.BillDate BETWEEN DATEADD(day, -30, GETDATE()) AND GETDATE() 
    ) AS '30 days' 
FROM Client 
INNER JOIN Vessel 
    ON Client.ClientID = Vessel.ClientID 
INNER JOIN Bills 
    ON Vessel.VesselID = Bills.VesselID 
GROUP BY 
    Bills.BillDate, Client.ClientName 

TOP 1 получит только результат от внутреннего запроса.

0

Скорректированного просуммировать bills.NetAmount за последние 30 дней:

SELECT   
     Bills.BillDate, 
     Client.ClientName, 
     SUM(bills.NetAmount) as '30 days' 
FROM Client INNER JOIN 
     Vessel ON Client.ClientID = Vessel.ClientID INNER JOIN 
     Bills ON Vessel.VesselID = Bills.VesselID 
WHERE Bills.BillDate BETWEEN DATEADD(day, -30, GETDATE()) AND GETDATE() 
GROUP BY Bills.BillDate, Client.ClientName 
Смежные вопросы