Всегда ли можно что-то сделать в SQL, если бы ты мог сделать это в Linq? - PullRequest
0 голосов
/ 05 октября 2009

Я пытаюсь написать SQL-оператор, который должен работать так, как показано ниже в запросе Linq. В основном я хочу суммировать два столбца (Наличные и Чек) из одного столбца (Значение * Количество) на основе определенного условия (Тип == "Чек"). Таким образом, если типом является «Чек», укажите значение в столбце «Чек», в противном случае укажите его в столбце «Наличные».

Linq:

from ac in m_DataContext.acquisitions
join ai in m_DataContext.acquireditems on ac.Identifier equals ai.AcquisitionIdentifier
group ai by ac.SessionIdentifier into g
select new
{
    SessionIdentifier = g.Key,
    Cash = g.Where(ai => ai.Type != "Check").Sum(ai => (double?)ai.Value * (int?)ai.Quantity) ?? 0,
    Check = g.Where(ai => ai.Type == "Check").Sum(ai => (double?)ai.Value * (int?)ai.Quantity) ?? 0,
    CheckQuantity = g.Where(ai => ai.Type == "Check").Sum(ai => (int?)ai.Quantity) ?? 0
};

SQL:

SELECT a.SessionIdentifier, a.Checks as CheckQuantity, ???? as Cash, ???? as Check
FROM Acquisitions ac
INNER JOIN AcquiredItems ai ON ai.AcquisitionIdentifier = ac.Identifier
GROUP BY a.SessionIdentifier

Возможно ли это?

1 Ответ

2 голосов
/ 05 октября 2009

Вы можете сделать это так:

select sum(case when type = 'cash' then Value * Quantity else 0 end) as Cash,
    sum(case when type = 'check' then Value * Quantity else 0 end) as Check
from ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...