2013-05-02 2 views
0

У меня есть 2 таблицы, которые мне нужно объединить и создать третий стол со столбцами, расположенными горизонтально. Таблицы являются следующие: enter image description hereЗапрос для упорядочивания строк по горизонтали

Мне нужен выход 2 из table1 и table2.

Я провел некоторое исследование и нашел, что мне нужно использовать PIVOT. Я также написал несколько запросов. Мой запрос:

SELECT * FROM (
    SELECT 
    CONVERT(CHAR(4), table_2.Date, 100) + CONVERT(CHAR(4), table_2.Date, 120) as RegistrationDate, 
    table_1.PDESC as ProductDescription from table_2 
    left outer join table_1 on table_1.PID = table_2.PID 
) 
tableT 
PIVOT (count(ProductDescription) FOR RegistrationDate 
IN ([Jan 2009],[Feb 2009],[Mar 2009],[Apr 2009],[May 2009],[Jun 2009])) AS pvt 

Но этот вопрос не работает! Я также добавил скрипт SQL для создания таблиц.

Я загрузил сценарий в here.

+4

Опубликовать сценарий к sqlfiddle.com вместо этого NSFW сайта – RichardTheKiwi

+4

Вы никогда не должны дать * загрузите * ссылку на вопрос [so], особенно на сайт для обмена файлами. Код должен предпочтительно содержаться в самом вопросе, если он слишком длинный, вы, вероятно, должны попытаться построить более короткий пример, если это невозможно, нужно связать сайт (желательно хорошо известный с достойной репутацией), где код появляется и не нужно загружать. Если указанная ссылка на скачивание имеет код, идентичный коду в вопросе, ссылка должна быть удалена. – Dukeling

+0

Поскольку вы выбираете из 'table_2' и присоединяетесь к' table_1', и если 'table_2.PID' является внешним ключом к' table_1.PID', вы должны изменить свое соединение на объединение INNER, поскольку никакой записи не существует в 'table_2', который не существует в' table_1'. Или измените так, что вы выбираете из таблицы_1 и левое присоединение к 'table_2', если вы хотите, чтобы продукты отображались в результатах, даже если в' table_2' нет записей. – GarethD

ответ

2

Проблема в том, что вы пытаетесь как count, так и отображать ProductDescription. Если вы хотите отобразить ProductDescription, вы можете сделать несколько разных способов.

Вместо применения count к ProductDescription, вы можете count в PID колонки:

SELECT * 
FROM 
(
    SELECT CONVERT(CHAR(4), t2.Date, 100) + CONVERT(CHAR(4), t2.Date, 120) as RegistrationDate, 
    t1.ProductDesc as ProductDescription, 
    t1.PID 
    from table_2 t2 
    left outer join table_1 t1 
    on t1.PID = t2.PID 
) tableT 
PIVOT 
(
    count(PID) FOR RegistrationDate 
    IN ([Jan 2009],[Feb 2009],[Mar 2009],[Apr 2009],[May 2009],[Jun 2009]) 
) AS pvt; 

См SQL Fiddle with Demo.

Или вы можете создать второй столбец в подзапросе, чтобы дважды вернуть ProductDescription. Одна колонка будет использоваться при подсчете и второй будет использоваться в окончательном дисплее:

SELECT * 
FROM 
(
    SELECT CONVERT(CHAR(4), t2.Date, 100) + CONVERT(CHAR(4), t2.Date, 120) as RegistrationDate, 
    t1.ProductDesc as ProductDescription, 
    t1.ProductDesc as Product 
    from table_2 t2 
    left outer join table_1 t1 
    on t1.PID = t2.PID 
) tableT 
PIVOT 
(
    count(ProductDescription) FOR RegistrationDate 
    IN ([Jan 2009],[Feb 2009],[Mar 2009],[Apr 2009],[May 2009],[Jun 2009]) 
) AS pvt; 

См SQL Fiddle with Demo

Смежные вопросы