Динамическое значение столбца с группировкой по (sql server и Linq) - PullRequest
1 голос
/ 13 декабря 2011

у меня есть таблица Plan со следующими образцами данных
enter image description here
я хочу агрегировать результат по PlanMonth, а для PlanStatus я хочу, чтобы, если какое-либо из его (в группе) значений было Drafted, я получал результат в виде результата и Under Approval в противном случае. я сделал это, используя следующий запрос

select PlanMonth, case when Flag=1 then 'Drafted' else 'Under Approval' end as PlanStatus
from 
(select p.PlanMonth, Max(CASE WHEN p.PlanStatus = 'Drafted' THEN 1 ELSE 0 END) Flag 
from Plans p 
group by p.PlanMonth
  ) inquery

Я проконсультировался в этом блоге . Что-то не так с этим? Более того, если кто-то может помочь мне перевести его на linq, я буду благодарен

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Ваш запрос будет работать.

С предоставленными вами примерами данных их можно немного упростить.

select p.PlanMonth,
       min(p.PlanStatus) as PlanStatus
from Plans as p
group by p.PlanMonth  

Это не будет работать, если у вас есть значения в PlanStatus, которые отсортированы по алфавиту до Drafted.

0 голосов
/ 13 декабря 2011

Следующий запрос Linq работал для меня

 return (from p in db.mktDrVisitPlans                        

                    group p by p.PlanMonth into grop
                    select
                    new VMVisitPlan
                    {
                        PlanMonth = grop.Key
                        PlanStatus = grop.Any(x=>x.p.PlanStatus == "Drafted")?"Hold":"Under Approval",

                    }).ToList();
...