2016-10-11 3 views
0

У меня есть две таблицы, которые я совмещаю, и это работает, но я думаю, что я создал вторую таблицу неправильно, поскольку у меня есть столбец для каждого элемента того, что действительно является вопросом с множественным выбором. Запрос заключается в следующем:Преобразование столбцов заголовков в строки элементов

select Count(n.ID) as MemCount, u.Pay1Click, u.PayMailCC, u.PayMailCheck, u.PayPhoneACH, u.PayPhoneCC, u.PayWuFoo 
from name as n inner join 
UD_Demo_ORG as u on n.ID = u.ID 
where n.MEMBER_TYPE like 'ORG_%' and n.CATEGORY not like '%_2' and 
(u.Pay1Click = '1' or u.PayMailCC = '1' or u.PayMailCheck = '1' or u.PayPhoneACH = '1' or u.PayPhoneCC = '1' or u.PayWuFoo = '1') 
group by u.Pay1Click, u.PayMailCC, u.PayMailCheck, u.PayPhoneACH, u.PayPhoneCC, u.PayWuFoo 

Результаты придумали так:

Count Pay1Click PayMailCC PayMailCheck PayPhoneACH PayPhoneCC PayWuFoo 
8  0   0   0    0    0   1 
25  0   0   0    0    1   0 
8  0   0   0    1    0   0 
99  0   0   1    0    0   0 
11  0   1   0    0    0   0 

Таким образом, вопрос, как я могу получить это 2 колонки, граф, а затем заголовки следующих 6 заголовков поэтому результаты выглядят так:

Спасибо.

+1

Какую 'СУБД' вы используете. Устали писать это заявление:/ –

+0

Извините, я виноват в этом. SQL Server 2012 – Jayson

ответ

0

Попробуйте один

Select Count, 

CASE WHEN Pay1Click=1 THEN 'Pay1Click' 
      PayMailCC=1 THEN ' PayMailCC' 
      PayMailCheck=1 THEN 'PayMailCheck' 
      PayPhoneACH=1 THEN 'PayPhoneACH' 
      PayPhoneCC=1 THEN 'PayPhoneCC' 
      PayWuFoo=1 THEN 'PayWuFoo' 
    END as PaymentType 

FROM ...... 
+0

Это сработало. Полностью забыл о заявлении дела. Благодарю. – Jayson

0

Я думаю, что вы действительно допустили ошибку в структуре второй таблицы. Вместо того, чтобы создавать строку для каждого вопроса с множественным выбором, я бы предложил преобразовать все эти столбцы в столбец «ответ», поэтому у вас будет фактическое имя альтернативы, как запись в этом столбце.

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

Подробнее об этом вы можете позаботиться о повторяющихся данных в таблице, поэтому повторное написание одной и той же строки может привести к увеличению вашей таблицы. если есть другие вещи, подразумеваемые к ответу, другие сведения, приведенные в таблице UD_Demo_ORG, то вы можете нормализовать таблицу, создавая таблицу payment_dimension или что-то вроде этого, дайте ваши варианты идентификатор, такие как

ID PaymentType OtherInfo(description, etc)... 
1  PayWuFoo   ... 
2  PayPhoneCC  ... 
3  PayPhoneACH  ... 
4  PayMailCheck  ... 
5  PayMailCC  ... 

Это называемую таблицей измерений, а затем в ваших записях, у вас будет идентификатор типа платежа, а не информация, которая вам не нужна. Таким образом, вместо большого набора результатов, может быть, вы могли бы упростить с помощью большого запроса и только

Count PaymentId 
8  1   
25  2   
8  3   
99  4   
11  5 

в виде результирующего набора. это сделает запрос быстрее, и если вам нужна другая информация, вы можете присоединиться к таблице и получить ее.

НО, если единственным полем, которое у вас будет, является имя, возможно, вы могли бы использовать payType как «id» в этом случае ... просто подумайте об этом. Он масштабируется, если вы разделяете таблицу измерений.

Некоторые ссылки для дальнейшего чтения:

  1. http://beginnersbook.com/2015/05/normalization-in-dbms/ "Нормализация в СУБД"

  2. http://searchdatamanagement.techtarget.com/answer/What-are-the-differences-between-fact-tables-and-dimension-tables-in-star-schemas "Различия между таблицами фактов и размеры столов"

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