Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Здравствуйте.
Не получается посчитать сумму грубых('kol_Grnar') и не грубых нарушений('kol_NeGrnar') по критерию dbo.Narush.FIO

Вот так считает нормально
SELECT
dbo.plan1.FIO,
COUNT(dbo.Narush.Grub_negrub)
FROM
dbo.Narush
INNER JOIN dbo.plan1 ON dbo.plan1.Id = dbo.Narush.FIO
GROUP BY
dbo.plan1.FIO


А так выдаёт бред(оч.много)
SELECT      
dbo.plan1.Id, 
dbo.plan1.FIO AS FIO,
dbo.plan1.premiya,
COUNT(dbo.Plan2.[4]) AS kolvo_zad,
(SUM(dbo.Plan2.[6]))/(COUNT(dbo.Plan2.[6])) AS  sred_kachestvo, 
(SUM(dbo.Plan2.[5]))/(COUNT(dbo.Plan2.[5])) AS sred_slojnost, 
plan1.premiya*(SUM(dbo.Plan2.[6]))/(COUNT(dbo.Plan2.[6])) * 
(SUM(dbo.Plan2.[5]))/(COUNT(dbo.Plan2.[5])) AS proc_prem,
 
'kol_NeGrnar' = COUNT(CASE WHEN (dbo.Narush.Grub_negrub=2) THEN 1 END),
'kol_Grnar' = COUNT(CASE WHEN (dbo.Narush.Grub_negrub=1) THEN 1 END)
 
FROM dbo.plan1       
RIGHT OUTER JOIN  dbo.Plan2  ON dbo.Plan2.[4] = dbo.plan1.Id
LEFT JOIN dbo.Narush ON Plan2.[4] = dbo.Narush.FIO
WHERE dbo.Plan2.[4] IS NOT NULL 
GROUP BY  plan1.Id, dbo.plan1.FIO, plan1.premiya, plan1.koef_racion,dbo.Plan2.[4],
dbo.Narush.Grub_negrub


К сообщению приложен файл. Размер - 5Kb
3 ноя 15, 20:59    [18366515]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
Balbidon
Member

Откуда: Donetsk->Emerald City
Сообщений: 358
Похоже, что у Вас в dbo.Plan2 есть несколько записей для одного значения dbo.plan1.Id. И, соответственно, несколько записей в dbo.Narush. Вот они и размножаются. Я бы попробовал что-то типа:

SELECT      
	dbo.plan1.Id, 
	dbo.plan1.FIO AS FIO,
	dbo.plan1.premiya,
	Plan2.kolvo_zad,
	Plan2.sred_kachestvo, 
	Plan2.sred_slojnost, 
	plan1.premiya*Plan2.proc_prem AS proc_prem,
 
	'kol_NeGrnar' = COUNT(CASE WHEN (dbo.Narush.Grub_negrub=2) THEN 1 END),
	'kol_Grnar' = COUNT(CASE WHEN (dbo.Narush.Grub_negrub=1) THEN 1 END)
 
FROM
	dbo.plan1       

		RIGHT OUTER JOIN
		(SELECT
			dbo.Plan2.[4],
			COUNT(dbo.Plan2.[4]) AS kolvo_zad,
			(SUM(dbo.Plan2.[6]))/(COUNT(dbo.Plan2.[6])) AS  sred_kachestvo, 
			(SUM(dbo.Plan2.[5]))/(COUNT(dbo.Plan2.[5])) AS sred_slojnost, 
			(SUM(dbo.Plan2.[6]))/(COUNT(dbo.Plan2.[6])) * (SUM(dbo.Plan2.[5]))/(COUNT(dbo.Plan2.[5])) AS proc_prem
		FROM
			dbo.Plan2
		GROUP BY
			dbo.Plan2.[4]) AS Plan2  ON Plan2.[4] = dbo.plan1.Id

			LEFT JOIN
			dbo.Narush ON Plan2.[4] = dbo.Narush.FIO

WHERE
	Plan2.[4] IS NOT NULL 
GROUP BY
	plan1.Id,
	dbo.plan1.FIO,
	plan1.premiya,
	plan1.koef_racion,
	dbo.Plan2.[4],
	dbo.Narush.Grub_negrub
4 ноя 15, 01:32    [18367451]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
miden
А так выдаёт бред(оч.много)

Потому что вы очень много добавили в GROUP BY.
Зачем - непонятно.
4 ноя 15, 09:14    [18367761]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Balbidon, большое Вам спасибо. Я чуток подправил и с нижеописанным кодом всё заработало. Теперь проблема в том, что записи по рабочим дублируются ро по Id и FIO, т.е. к примеру у первого рабочего два нарушения(1груб и 1негруб) и выводиться это должно в одной строчке. Можно ли это исправить?
SELECT      
	dbo.plan1.Id, 
	dbo.plan1.FIO AS FIO,
	dbo.plan1.premiya,
	Plan2.kolvo_zad,
	Plan2.sred_kachestvo, 
	Plan2.sred_slojnost, 
	plan1.premiya*Plan2.proc_prem AS proc_prem,
	'kol_NeGrnar' = COUNT(CASE WHEN (dbo.Narush.Grub_negrub=1) THEN 1 END),
	'kol_Grnar' = COUNT(CASE WHEN (dbo.Narush.Grub_negrub=2) THEN 1 END)
FROM
	dbo.plan1       
		RIGHT JOIN
		(SELECT
			dbo.Plan2.[4],
			COUNT(dbo.Plan2.[4]) AS kolvo_zad,
			(SUM(dbo.Plan2.[6]))/(COUNT(dbo.Plan2.[6])) AS  sred_kachestvo, 
			(SUM(dbo.Plan2.[5]))/(COUNT(dbo.Plan2.[5])) AS sred_slojnost, 
			(SUM(dbo.Plan2.[6]))/(COUNT(dbo.Plan2.[6])) * (SUM(dbo.Plan2.[5]))/(COUNT(dbo.Plan2.[5])) AS proc_prem
		FROM
			dbo.Plan2
		GROUP BY
			dbo.Plan2.[4]) AS Plan2  ON Plan2.[4] = dbo.plan1.Id
			LEFT JOIN
			dbo.Narush ON Plan2.[4] = dbo.Narush.FIO
WHERE
	Plan2.[4] IS NOT NULL 
GROUP BY
	plan1.Id,
	dbo.plan1.FIO,
	plan1.premiya,
	plan1.koef_racion,
	dbo.Narush.Grub_negrub,
        Plan2.kolvo_zad,
	Plan2.sred_kachestvo,
	Plan2.sred_slojnost,
	Plan2.proc_prem


К сообщению приложен файл. Размер - 54Kb
4 ноя 15, 10:20    [18367902]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Glory, я добавил эти столбцы в GROUP BY потому что иначе возникают ошибки по сортировке вида:
"Столбец "ля-ля-ля" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY"
4 ноя 15, 10:26    [18367910]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
miden
Glory, я добавил эти столбцы в GROUP BY потому что иначе возникают ошибки по сортировке вида:

Поля в GROUP BY добавляют для получения нужного результата, а не просто так
Вы вообще понимаете, как работает GROUP BY ? Или для вас все равно, сколько полей в нем указано ?
4 ноя 15, 10:33    [18367921]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Glory, нужный результат уже получен, но имеется проблема с дублированием, можете ли Вы посоветовать её решить? Я не большой специалист в построении SQL запросов, поэтому прошу здесь помощи.
4 ноя 15, 10:50    [18367959]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
miden
нужный результат уже получен, но имеется проблема с дублированием,

Смешно
Нужный результат -- это результат, где нет никаких проблем

miden
можете ли Вы посоветовать её решить? Я не большой специалист в построении SQL запросов

- Изучить оконные агрегатные функции SUM() OVER
или
- не пытаться писать все в один запрос, а использовать вложенные запросы
4 ноя 15, 10:57    [18367975]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Glory, спасибо за подсказку, с этим кодом всё получилось. Осталось ещё доваять 70% :)
SELECT      
dbo.plan1.Id, 
dbo.plan1.FIO,
dbo.plan1.premiya,
COUNT(dbo.Plan2.[4]) AS kolvo_zad,
AVG(dbo.Plan2.[6]) AS  sred_kachestvo, 
AVG(dbo.Plan2.[5]) AS sred_slojnost, 
plan1.premiya * AVG(dbo.Plan2.[6]) * AVG(dbo.Plan2.[5]) AS proc_prem,

'kol_NeGrnar' = COUNT(Y.Grub_negrub) OVER (PARTITION BY Y.FIO, Y.Grub_negrub),
'kol_Grnar' = COUNT(YY.Grub_negrub) OVER (PARTITION BY YY.FIO, YY.Grub_negrub)

FROM dbo.plan1       
LEFT JOIN  dbo.Plan2 ON dbo.Plan2.[4] = dbo.plan1.Id
LEFT JOIN dbo.Narush AS Y ON dbo.Plan2.[4] = Y.FIO AND Y.Grub_negrub = 1
LEFT JOIN dbo.Narush AS YY ON dbo.Plan2.[4] = YY.FIO AND YY.Grub_negrub = 2
WHERE dbo.Plan2.[4] IS NOT NULL 
GROUP BY  plan1.Id, dbo.plan1.FIO, plan1.premiya, plan1.koef_racion, 
Y.Grub_negrub, Y.FIO, YY.FIO, YY.Grub_negrub
ORDER BY dbo.plan1.FIO


К сообщению приложен файл. Размер - 38Kb
4 ноя 15, 11:56    [18368174]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Glory, всё-таки неправильно мой вариант делает выборку. Вы можете подсказать ещё? Есть код, в котором дублируются записи. Нужно исключить дублирование. SUM() OVER пробовал. При двух грубых нарушениях считается как одно. Хочу отталкиваться от этого рабочего кода
SELECT      
	dbo.plan1.Id, 
	dbo.plan1.FIO AS FIO,
	dbo.plan1.premiya,
	Plan2.kolvo_zad,
	Plan2.sred_kachestvo, 
	Plan2.sred_slojnost, 
	plan1.premiya*Plan2.proc_prem AS proc_prem,
	'kol_NeGrnar' = COUNT(CASE WHEN (dbo.Narush.Grub_negrub=1) THEN 1 END),
	'kol_Grnar' = COUNT(CASE WHEN (dbo.Narush.Grub_negrub=2) THEN 1 END)
FROM
	dbo.plan1       
		RIGHT JOIN
		(SELECT
			dbo.Plan2.[4],
			COUNT(dbo.Plan2.[4]) AS kolvo_zad,
			(SUM(dbo.Plan2.[6]))/(COUNT(dbo.Plan2.[6])) AS  sred_kachestvo, 
			(SUM(dbo.Plan2.[5]))/(COUNT(dbo.Plan2.[5])) AS sred_slojnost, 
			(SUM(dbo.Plan2.[6]))/(COUNT(dbo.Plan2.[6])) * (SUM(dbo.Plan2.[5]))/(COUNT(dbo.Plan2.[5])) AS proc_prem
		FROM
			dbo.Plan2
		GROUP BY
			dbo.Plan2.[4]) AS Plan2  ON Plan2.[4] = dbo.plan1.Id
			LEFT JOIN
			dbo.Narush ON Plan2.[4] = dbo.Narush.FIO
WHERE
	Plan2.[4] IS NOT NULL 
GROUP BY
	plan1.Id,
	dbo.plan1.FIO,
	plan1.premiya,
	plan1.koef_racion,
	dbo.Narush.Grub_negrub,
        Plan2.kolvo_zad,
	Plan2.sred_kachestvo,
	Plan2.sred_slojnost,
	Plan2.proc_prem
4 ноя 15, 14:03    [18368715]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Из вышеописанного кода получаю вот такую табличку. Как убрать дубляж по рабочему 2, чтобы его нарушения отражались в одной строке?
4 ноя 15, 14:09    [18368740]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20


К сообщению приложен файл. Размер - 39Kb
4 ноя 15, 14:09    [18368743]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
o-o
Guest
1. посчитайте все свои агрегаты в Plan2, группируя только по id.
2. посчитайте все свои агрегаты в Narush, группируя только по FIO.
(а зачем там ID, оно соответствует FIO? тогда тоже по ID группируйте)
3. к Plan1 присоедините результаты из 1, 2. удобнее через CTE,
но если никак, то подзапросами
4 ноя 15, 14:18    [18368774]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
o-o, я попробовал Ваш вариант. Результат снова не правильный. Снова записи дублируются.
SELECT      
	dbo.plan1.Id, 
	dbo.plan1.FIO AS FIO,
	dbo.plan1.premiya,
	Plan2.kolvo_zad,
	Plan2.sred_kachestvo, 
	Plan2.sred_slojnost, 
	plan1.premiya*Plan2.proc_prem AS proc_prem,
	Narush.kol_NeGrnar,
	Narush.kol_Grnar
FROM
	dbo.plan1       

		LEFT JOIN
			(SELECT
			dbo.Plan2.[4],
			COUNT(dbo.Plan2.[4]) AS kolvo_zad,
			AVG(dbo.Plan2.[6]) AS  sred_kachestvo, 
			AVG(dbo.Plan2.[5]) AS sred_slojnost, 
			AVG(dbo.Plan2.[6]) * AVG(dbo.Plan2.[5]) AS proc_prem
			FROM	dbo.Plan2
			GROUP BY	dbo.Plan2.[4]) 
    AS 
		Plan2  ON Plan2.[4] = dbo.plan1.Id

	  LEFT  JOIN 
			(SELECT Narush.FIO, Narush.Grub_negrub,
			'kol_NeGrnar' = COUNT(CASE WHEN (Grub_negrub=1) THEN 1 END),
			'kol_Grnar' = COUNT(CASE WHEN (Grub_negrub=2) THEN 1 END)
			FROM dbo.Narush
			GROUP BY Narush.FIO, Narush.Grub_negrub) 
    AS 
		Narush ON Narush.FIO = dbo.plan1.Id

WHERE
	Plan2.[4] IS NOT NULL 
GROUP BY
	plan1.Id,
	dbo.plan1.FIO,
	plan1.premiya,
	plan1.koef_racion,
  Plan2.kolvo_zad,
	Plan2.sred_kachestvo,
	Plan2.sred_slojnost,
	Plan2.proc_prem,
	Narush.Grub_negrub,
  Narush.kol_NeGrnar,
  Narush.kol_Grnar


К сообщению приложен файл. Размер - 46Kb
4 ноя 15, 15:29    [18368978]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
o-o
Guest
вы не мой вариант пробуете, а свое гнете.
в п.2 нет никакого Narush.Grub_negrub в GROUP BY
в п.3 нет никакого GROUP BY вообще
4 ноя 15, 16:19    [18369094]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
o-o, спасибо, всё заработало.
SELECT      
	dbo.plan1.Id, 
	dbo.plan1.FIO AS FIO,
	dbo.plan1.premiya,
	Plan2.kolvo_zad,
	Plan2.sred_kachestvo, 
	Plan2.sred_slojnost, 
	plan1.premiya*Plan2.proc_prem AS proc_prem,
	Narush.kol_NeGrnar,
	Narush.kol_Grnar
FROM
	dbo.plan1       

		LEFT JOIN
			(SELECT
			dbo.Plan2.[4],
			COUNT(dbo.Plan2.[4]) AS kolvo_zad,
			AVG(dbo.Plan2.[6]) AS  sred_kachestvo, 
			AVG(dbo.Plan2.[5]) AS sred_slojnost, 
			AVG(dbo.Plan2.[6]) * AVG(dbo.Plan2.[5]) AS proc_prem
			FROM	dbo.Plan2
			GROUP BY dbo.Plan2.[4]) 
                AS Plan2  ON Plan2.[4] = dbo.plan1.Id

	       LEFT  JOIN 
			(SELECT Narush.FIO,
			'kol_NeGrnar' = COUNT(CASE WHEN (Grub_negrub=2) THEN 1 END),
			'kol_Grnar' = COUNT(CASE WHEN (Grub_negrub=1) THEN 1 END)
			FROM dbo.Narush
			GROUP BY Narush.FIO) 
                AS Narush ON Narush.FIO = dbo.plan1.Id

               WHERE Plan2.[4] IS NOT NULL 


К сообщению приложен файл. Размер - 40Kb
4 ноя 15, 16:53    [18369244]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Снова вопрос. Как заполнить значениями(нулями) два последних столбца у рабочего 4? Иначе у меня дальше формула не считает премию, т.к. берёт оттуда значения xD
4 ноя 15, 20:08    [18369989]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Получается, что запросы вложенные в JOIN это не выход, а костыли. Как перестроить код запроса, описанного выше, чтобы он был без вложений в JOIN?
4 ноя 15, 20:36    [18370090]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
Balbidon
Member

Откуда: Donetsk->Emerald City
Сообщений: 358
miden,

Попробуйте своё

'kol_NeGrnar' = COUNT(CASE WHEN (Grub_negrub=2) THEN 1 END),
'kol_Grnar' = COUNT(CASE WHEN (Grub_negrub=1) THEN 1 END)


заменить на

'kol_NeGrnar' = SUM(CASE WHEN (Grub_negrub=2) THEN 1 ELSE 0 END),
'kol_Grnar' = SUM(CASE WHEN (Grub_negrub=1) THEN 1 ELSE 0 END)
4 ноя 15, 20:59    [18370160]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Balbidon, пробовал, не помогает
SELECT      
	dbo.plan1.Id, 
	dbo.plan1.FIO AS FIO,
	dbo.plan1.oklad,
	dbo.plan1.premiya,
	Plan2.kolvo_zad,
	Plan2.sred_kachestvo, 
	Plan2.sred_slojnost, 
	plan1.premiya*Plan2.proc_prem AS proc_prem,
	Narush.kol_NeGrnar,
	Narush.kol_NeGrnarProc,
	Narush.kol_Grnar,
	Narush.kol_GrnarProc,
	Narush.main_KD,
	plan1.koef_racion,
  'main_prem'=Narush.main_KD*(plan1.premiya*Plan2.proc_prem)/100.0+plan1.koef_racion
FROM
	dbo.plan1       

		LEFT JOIN
			(SELECT
			dbo.Plan2.[4],
			COUNT(dbo.Plan2.[4]) AS kolvo_zad,
			AVG(dbo.Plan2.[6]) AS  sred_kachestvo, 
			AVG(dbo.Plan2.[5]) AS sred_slojnost, 
			AVG(dbo.Plan2.[6]) * AVG(dbo.Plan2.[5]) AS proc_prem
			FROM	dbo.Plan2
			GROUP BY	dbo.Plan2.[4]) 
    AS 
		Plan2  ON Plan2.[4] = dbo.plan1.Id

	  LEFT  JOIN 
			(SELECT Narush.FIO,
			'kol_NeGrnar' = COUNT(CASE WHEN (Grub_negrub=2) THEN 1 ELSE 0 END),
			'kol_Grnar' = COUNT(CASE WHEN (Grub_negrub=1) THEN 1 ELSE 0 END),

CASE (COUNT(CASE WHEN (Grub_negrub=2) THEN 1  ELSE 0
END))
WHEN  0 THEN  100
WHEN  1 THEN  80
WHEN  2 THEN  60
WHEN  3 THEN  40
WHEN  4 THEN  20
ELSE 0
END AS kol_NeGrnarProc,

CASE (COUNT(CASE WHEN (Grub_negrub=1) THEN 1 END)) WHEN  0 THEN  100
ELSE 0
END AS kol_GrnarProc,

 CASE(CASE(COUNT(CASE WHEN (Grub_negrub=1) THEN 1  END)) 
 WHEN  0 THEN  0 ELSE 100 END)
WHEN 100 THEN  0 ELSE 
(CASE (COUNT(CASE WHEN (Grub_negrub=2) THEN 1 END)) 
WHEN  0 THEN  100
WHEN  1 THEN  80
WHEN  2 THEN  60
WHEN  3 THEN  40
WHEN  4 THEN  20
ELSE 0
END)END AS main_KD

FROM dbo.Narush
GROUP BY Narush.FIO) 
AS Narush ON Narush.FIO = dbo.plan1.Id

WHERE
	Plan2.[4] IS NOT NULL 


К сообщению приложен файл. Размер - 56Kb
4 ноя 15, 21:02    [18370172]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Balbidon, получается, что если Narush.Grub_negrub не равно ни 1 ни 2 то в основной запрос ничего не возвращается, соответственно нельзя далее эти значения использовать.
4 ноя 15, 21:04    [18370176]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
Balbidon
Member

Откуда: Donetsk->Emerald City
Сообщений: 358
miden,

Там главное COUNT на SUM поменять. А Вы этого не сделали.
4 ноя 15, 21:04    [18370177]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Balbidon, пробовал менять COUNT на SUM, не помогает
SELECT      
	dbo.plan1.Id, 
	dbo.plan1.FIO AS FIO,
	dbo.plan1.premiya,
	Plan2.kolvo_zad,
	Plan2.sred_kachestvo, 
	Plan2.sred_slojnost, 
	plan1.premiya*Plan2.proc_prem AS proc_prem,
	Narush.kol_NeGrnar,
	Narush.kol_Grnar
FROM
	dbo.plan1       

		LEFT JOIN
			(SELECT
			dbo.Plan2.[4],
			COUNT(dbo.Plan2.[4]) AS kolvo_zad,
			AVG(dbo.Plan2.[6]) AS  sred_kachestvo, 
			AVG(dbo.Plan2.[5]) AS sred_slojnost, 
			AVG(dbo.Plan2.[6]) * AVG(dbo.Plan2.[5]) AS proc_prem
			FROM	dbo.Plan2
			GROUP BY dbo.Plan2.[4]) 
                AS Plan2  ON Plan2.[4] = dbo.plan1.Id

	       LEFT  JOIN 
			(SELECT Narush.FIO,
			'kol_NeGrnar' = SUM(CASE WHEN (Grub_negrub=2) THEN 1 END),
			'kol_Grnar' = SUM(CASE WHEN (Grub_negrub=1) THEN 1 END)
			FROM dbo.Narush
			GROUP BY Narush.FIO) 
                AS Narush ON Narush.FIO = dbo.plan1.Id

               WHERE Plan2.[4] IS NOT NULL 


К сообщению приложен файл. Размер - 41Kb
4 ноя 15, 21:12    [18370201]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
Balbidon
Member

Откуда: Donetsk->Emerald City
Сообщений: 358
miden,

Ваша правда.

Ну, тогда вместо

			(SELECT Narush.FIO,
			'kol_NeGrnar' = SUM(CASE WHEN (Grub_negrub=2) THEN 1 END),
			'kol_Grnar' = SUM(CASE WHEN (Grub_negrub=1) THEN 1 END)
			FROM dbo.Narush
			GROUP BY Narush.FIO) 


попробовать

			(SELECT sq_p1.Id AS FIO,
			'kol_NeGrnar' = SUM(CASE WHEN (Grub_negrub=2) THEN 1 END),
			'kol_Grnar' = SUM(CASE WHEN (Grub_negrub=1) THEN 1 END)
			FROM dbo.plan1 AS sq_p1 LEFT JOIN dbo.Narush AS sq_n ON sq_p1.Id = sq_n.FIO
			GROUP BY sq_p1.Id) 
4 ноя 15, 21:45    [18370310]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с выборкой по трём таблицам. count(case - SQL Server  [new]
miden
Member

Откуда:
Сообщений: 20
Balbidon, [Err] 42000 - [SQL Server]Неправильный синтаксис около ключевого слова "CASE".
4 ноя 15, 21:57    [18370364]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить