Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Распределить по колонкам  [new]
ferzmikk
Member

Откуда:
Сообщений: 2220
Здравствуйте!

Есть такая таблица
ГородКлиент ТТ ОтветственныйОтгрузки
Город1Клиент1ТТ1Сидоров45
Город1Клиент1ТТ2Петров35
Город1Клиент2ТТ3Иванов20
Город1Клиент2ТТ3Петров20
Город1Клиент3ТТ4Петров31
Город1Клиент3ТТ4Иванов33
Город1Клиент3ТТ4Сидоров32


В одном месяце в одной ТТ могут быть привязаны несколько ответственных за ТТ. А если их будет несколько, значит в одной ТТ будет несколько соответствующих строк. Поэтому в одной строке нужно распределить ответственных по колонкам "Ответственный1", "Ответственный2" и "Ответственный3". Больше трех ответственных в месяц не бывает. То есть нужно получить такой результат. Не кросс таблица

ГородКлиент ТТ Ответственный1Ответственный2Ответственный3Отгрузки
Город1Клиент1ТТ1Сидоров45
Город1Клиент1ТТ2Петров35
Город1Клиент2ТТ3ИвановПетров40
Город1Клиент3ТТ4ИвановПетровСидоров96


Пишу такой запрос
SELECT
	ТТ1.Город,
	ТТ1.Клиент,
        ТТ1.ТТ,
	IF  ТТ2.КоличествоОтветственных = 1 THEN ... END IF AS Ответственный1,
	IF  ТТ2.КоличествоОтветственных = 2 THEN ... END IF AS Ответственный2,
	IF  ТТ2.КоличествоОтветственных = 3 THEN ... END IF AS Ответственный3,
        SUM(Отгрузки)	
FROM
	Таблица1 AS ТТ1 LEFT JOIN
        (SELECT DISTINCT		
                Т1.ТТ,
		Count(Т1.Ответственный) AS КоличествоОтветственных
	FROM
		Таблица AS Т1
	GROUP BY		
		Т1.ТТ
        ) AS ТТ2
        ON ТТ1.ТТ = ТТ2.ТТ
GROUP BY
	ТТ1.Город,
	ТТ1.Клиент,
        ТТ1.ТТ,
	ТТ2.Ответственный1,
	ТТ2.Ответственный2,
	TT2.Ответственный3

Оцените запрос. Как вытащить ответственного?
30 май 16, 07:53    [19234079]     Ответить | Цитировать Сообщить модератору
 Re: Распределить по колонкам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
ferzmikk
Не кросс таблица
Почему? пивот как пивот... другой вопрос, почему именно в таком порядке фамилии раскладены по полям "ОтветственныйХ"... по алфавиту, что ли?
30 май 16, 08:58    [19234232]     Ответить | Цитировать Сообщить модератору
 Re: Распределить по колонкам  [new]
ferzmikk
Member

Откуда:
Сообщений: 2220
Akina
ferzmikk
Не кросс таблица
Почему? пивот как пивот... другой вопрос, почему именно в таком порядке фамилии раскладены по полям "ОтветственныйХ"... по алфавиту, что ли?

не обязательно по алфавиту. Если делать кросс, то ответственных очень много. Не нужно
30 май 16, 09:03    [19234253]     Ответить | Цитировать Сообщить модератору
 Re: Распределить по колонкам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
ferzmikk
не обязательно по алфавиту.

Вообще-то ты должен был сообразить, что тебе НЕОБХОДИМ критерий, по которому можно ОДНОЗНАЧНО сказать, в какое из полей попадёт тот или иной ответственный.

ferzmikk
Если делать кросс, то ответственных очень много.

А ты не кросси по фамилии. Пронумеруй их в группе (вот тут и нужен критерий) и кросси этому по номеру.
30 май 16, 09:35    [19234364]     Ответить | Цитировать Сообщить модератору
 Re: Распределить по колонкам  [new]
ferzmikk
Member

Откуда:
Сообщений: 2220
Akina
Вообще-то ты должен был сообразить, что тебе НЕОБХОДИМ критерий, по которому можно ОДНОЗНАЧНО сказать, в какое из полей попадёт тот или иной ответственный.

А как этот критерий создать?
30 май 16, 09:46    [19234434]     Ответить | Цитировать Сообщить модератору
 Re: Распределить по колонкам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
А это уже ТВОИ проблемы.
Я вижу два варианта. Вернее, три, но ORDER BY RAND() мне не нравится.
Вариант 1 - сортировка по фамилии. Кстати, показанные данные ему не противоречат.
Вариант 2 - сортировка по дате-времени "вступления в ответственность", если такое поле в структуре есть.
30 май 16, 09:48    [19234450]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить