drvfn Ответов: 1

Выберите количество в новых разных столбцах


Привет

У меня есть этот sql selects с объединением, но мне нужен результат в двух столбцах, нормальный и срочный, а не результат в одном столбце

SELECT COUNT(k.Id) AS 'Normal' , P.Descr, P.DthUlt, P.Idpain, E.IP, E.IdPan, K.IdEst, k.Idpain from Kit AS K 

INNER JOIN  Extends AS E ON E.IdPan = K.IdPain
INNER JOIN Painel AS P ON P.IdPain = k.IdPain and k.IdEst = 1

GROUP BY k.IdPain, P.Descr, P.DthUlt, P.Idpain, E.IP, E.IdPan, K.IdEst

UNION

SELECT COUNT(k.Id) AS 'Urgent' , P.Descr, P.DthUlt, P.Idpain, E.IP, E.IdPan, K.IdEst, k.Idpain from Kit AS K 

INNER JOIN  Extends AS E ON E.IdPan = K.IdPain
INNER JOIN Painel AS P ON P.IdPain = k.IdPain and k.IdEst = 2

GROUP BY k.IdPain, P.Descr, P.DthUlt, P.Idpain, E.IP, E.IdPan, K.IdEst

order by P.Descr

¿Как я могу добавить новый столбец с именем normal и другим именем urgent с графами?

edit: im loking, чтобы улучшить его только в одной строке

Что я уже пробовал:

Два выбора, внутреннее соединение, объединение всех..

1 Ответов

Рейтинг:
7

CHill60

Включите "фиктивный" столбец в каждый выбор, например

SELECT COUNT(k.Id) AS 'Normal', 0 AS 'Urgent' , P.Descr, P.DthUlt, P.Idpain, E.IP, E.IdPan, K.IdEst, k.Idpain from Kit AS K 

INNER JOIN  Extends AS E ON E.IdPan = K.IdPain
INNER JOIN Painel AS P ON P.IdPain = k.IdPain and k.IdEst = 1

GROUP BY k.IdPain, P.Descr, P.DthUlt, P.Idpain, E.IP, E.IdPan, K.IdEst

UNION

SELECT 0 AS 'Normal', COUNT(k.Id) AS 'Urgent' , P.Descr, P.DthUlt, P.Idpain, E.IP, E.IdPan, K.IdEst, k.Idpain from Kit AS K 

INNER JOIN  Extends AS E ON E.IdPan = K.IdPain
INNER JOIN Painel AS P ON P.IdPain = k.IdPain and k.IdEst = 2

GROUP BY k.IdPain, P.Descr, P.DthUlt, P.Idpain, E.IP, E.IdPan, K.IdEst

order by P.Descr


Ваша следующая проблема заключается в том, что это будет более 2 строк, а не одна, но без образца и ожидаемых данных я не буду копать дальше. Возможно, вам придется использовать случай, когда ...Или заявление раздел. Зависит от того, какую версию SQL вы используете

[EDIT] вот метод грубой силы для получения вашего запроса на 1 строку в группе:
select SUM(normal) as 'Normal', SUM(Urgent) as 'Urgent', Descr, DtUlt, Idpain, IP, IdPan, IdEst
 from (

-- insert the query above into here

) q
 group by Descr, DtUlt, Idpain, IP, IdPan, IdEst

Вероятно вы можете упростить исходный запрос используя секцию а не объединение но решение которое я представил здесь будет работать даже если оно не является элегантным


Maciej Los

5ed!

drvfn

Спасибо CHill60, ваше решение работает идеально, но, как вы сказали, мне нужно это в одном ряду,
это для datagridvies в приложении Windows form , сделать это будет очень полезно для меня, я пытался использовать случай, когда конец, но я не нашел, как это сделать,

CHill60

Как я и предлагал, опубликуйте некоторые примеры данных и ваши ожидаемые результаты, расскажите нам, какую версию sql вы используете, и мы, возможно, сможем вам помочь

drvfn

спасибо за Ваш ответ CHiLL60, sql-это 11.1, и мои ожидаемые результаты таковы:

Обычная / срочная / Н / DthUlt / П. Idpain / ИС / Е. IdPan / к. Idpain
12 / 10 / Туве / 02-02-18 / 12 /10.18.1.1 / 12 / 12
0 / 1 / tuve2/ 02-02-18 / 13 /10.18.1.2 / 13 / 13
14 / 0 / tuve3 / 02-02-18 / 15 /10.18.1.8 / 15 / 15
0 / 0 / tuve4/ 02-02-18 / 17 /10.18.1.9 / 17 / 17

с вашим последним решением у меня есть:


Обычная / срочная / Н / DthUlt / П. Idpain / ИС / Е. IdPan / к. Idpain
12 / 0 / Туве / 02-02-18 / 12 /10.18.1.1 / 12 / 12
0 / 10 / Туве / 02-02-18 / 12 /10.18.1.1 / 12 / 12
14 / 0 / tuve3 / 02-02-18 / 15 /10.18.1.8 / 15 / 15
0 / 0 / tuve3 / 02-02-18 / 15 /10.18.1.8 / 15 / 15

я надеюсь, что это будет полезно четырьмя понять

CHill60

Я обновил свое решение