Я видел несколько похожих вопросов, заданных в Stackoverflow с тем же вопросом, но это не подходит ни к одному из них.Строки отображения в виде столбцов
У меня есть 3 стола Покупка, гостиница, покупка автомобилей в отеле и автомобиле - от 1 до 0 или много отношений. MS SQL 2008 Server.
Покупка Таблица
pid bookingdate ...
1
2
3
Table Hotel
hid pid amount rooms location brand...
1 1
2 1
3 1
4 3
4 3
автомобилей Таблица
cid pid make model ...
1 1
2 2
3 2
То, что я хочу показать данные гостиницы в столбцах
pid bookingdate cid make model hid1 amount1 rooms1 location1 brand1 hid2 amount2 rooms2 location2 brand2 hid3 amount3 rooms3 location3 brand3 hid4 amount4 rooms4 location4 brand4
Если для данного идентификатора покупки есть только один отель, другие столбцы должны быть пустыми. Если более 4 отелей игнорируют другие отели (5-й и 6-й векторы)
Пожалуйста, примите, что на этом этапе на столике может быть 0 или 1.
(Advance :: >> Если таблица автомобиля может 0 много (отношений до покупки) 1.) брать только первую запись на счет 2.) получить сумму записей.)
Цели этого проекта сгенерируйте файл csv, который может быть загружен в сторонний продукт. В настоящее время у нас около 100 колонок для покупки и автомобилей около 30 колонок для отеля (всего 130). При отображении строк в гостиницах это будет 220 (100 + 30 x 4) столбцов. И около 100 тыс. Строк. Производительность также является проблемой.
Я пробовал несколько вещей, но ничего успешного не было даже близко к застреванию. This был самым близким я получил, но у меня есть 30 столбцов, чтобы дублировать не только один, на самом деле у меня такое чувство, что PIVOT
- это не путь. Я имею в виду, используя DENSE_RANK()
или что-то подобное
SELECT pid
, hid
, DENSE_RANK() OVER(ORDER BY pid)
FROM HOTEL
WHERE pid IN (
SELECT pid
FROM Hotel
WHERE pid IN (
SELECT pid
FROM Purchase
WHERE rdate BETWEEN '2014-04-01' AND '2014-12-31'
)
GROUP BY pid
HAVING COUNT(pid) > 1
)
Если предположить, что мы могли бы иметь возможность обрабатывать отели с более чем 1, прикрепленного к первой покупки, используя курсор (безобразно) или что-то подобное
Что вы пробовали? Можете ли вы показать запрос и где вы собрали стек? – Fabio
Я пробовал несколько вещей, но ничего успешного не было даже близко к застреванию. http://sqlfiddle.com/#!3/832f1/16 был самым близким я получил, но у меня есть 30 столбцов, чтобы дублировать не только один, на самом деле у меня такое чувство, что PIVOT - это не путь. Я имею в виду, используя DENSE_RANK() или что-то вроде этого 'Select PID, газоразрядных, DENSE_RANK() OVER (ORDER BY ИДП) ИЗ ОТЕЛЯ ГДЕ ПИД-регулятора ( ВЫБОР PID FROM Отель WHERE PID IN (SELECT FROM PID Purchase WHERE rdate BETWEEN '2014-04-01' AND '2014-12-31' ) GROUP BY pid HAVING COUNT (pid)> 1) ' – Udaan