2013-09-11 3 views
2

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

данные в моей базе данных может выглядеть следующим образом:

id,  price,  cost,  description,  color 
    --------------------------------------------------------------   
    10,   99,   50,   bicycle,   blue 
    15,   88,   45,   tricycle,   red 
    18,   90,   48,   tricycle,   blue 
    20,   95,   55,   bicycle,   red 

Я пытаюсь написать запрос, возвращающий результаты, которые дали бы мне несколько столбцов для представления каждого типа цвета, как «синий» или как " Red»и их идентификатор, цена, стоимость и описание, например:

Blue, id, price, cost, description, Red, id, price, cost, description 
blue, 10, 99, 50, bicycle,  red, 15, 88, 45, tricycle 
blue, 18, 90, 48, tricycle, red, 20, 95, 55, bicycle 

Дело в том, чтобы быть в состоянии видеть на стороне данных о бок, я мог бы легко сделать это в сводной таблице после того, как данные в Excel, но мы пытаемся выполнить это с помощью SQL-запроса.

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

*

Так при рассмотрении комментариев ниже я имею в виду, может быть, лучше, что я просто включить код acutal я работаю с компанией.

Моя проблема: мне нужны результаты обоих операторов select в одном запросе. Я просто не могу понять, как это сделать. Таким образом, в общей сложности там будет 7 колонка

Код класса, Lost Time Претензия Count, Потерянное время Произведенные Loss, Lost Time Претензия Средние медицинский Только Претензия граф, медицинские Только Произведенные потери, Медицинская Только Утверждают Среднюю

select distinct cm.class_code, count(cm.class_code) as "Lost Time Claim Count", 
    round(sum(cf.Incurred_Total),0) as "Lost Time Incurred Loss", 
    round((sum(cf.Incurred_Total)/count(cm.class_code)),0) as "Lost Time Claim Average", 
    cm.claim_type_group 

from claim_master cm left outer join 
claim_financial_view cf on cm.claim_master_id = cf.Claim_Master_Id 

where cm.accident_date > to_date('31-Dec-2007','dd-mm-yyyy') and 
    cm.accident_date < to_date('01-Jan-2013','dd-mm-yyyy') and 
    cm.claim_type_group = 'L' 

group by cm.class_code, 
    cm.claim_type_group 

Order by cm.class_code 

__ 

select distinct cm.class_code, count(cm.class_code) as "Medical Only Claim Count", 
    round(sum(cf.Incurred_Total),0) as "Medical Only Incurred Loss", 
    round((sum(cf.Incurred_Total)/count(cm.class_code)),0) as "Medical Only Claim  Average", 
    cm.claim_type_group 

from claim_master cm left outer join 
claim_financial_view cf on cm.claim_master_id = cf.Claim_Master_Id 

where cm.accident_date > to_date('31-Dec-2007','dd-mm-yyyy') and 
    cm.accident_date < to_date('01-Jan-2013','dd-mm-yyyy') and 
    cm.claim_type_group = 'M' 

group by cm.class_code, 
    cm.Claim_Type_Group 

Order by cm.class_code 
+1

Есть ли определенный, конечный набор цветов? Сохраняется ли это в отдельной таблице? Вы не сможете обернуть это без него. – Ben

+0

P.S. не беспокойтесь о картинах; лучше сделать необработанный текст, так как это означает, что люди могут использовать те же данные, что и вам легче. Если вы хотите нарисовать таблицу [Senseful Solutions имеют отличный инструмент] (http://www.sensefulsolutions.com/2010/10/format-text-as-table.html), но всегда полезно разместить образец структуры таблицы и небольшое количество фактических данных в [SQL Fiddle] (http://www.sqlfiddle.com/), чтобы люди могли играть, что делает их более вероятными для ответа на ваш вопрос! – Ben

+0

Было бы два цвета, и цвет был бы в отдельной таблице. – Brad

ответ

1

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

select a.color as blue, a.id as idb, a.price as priceb 
    , a.cost as costb, a.description as descb 
    , b.color as red, b.id as idr, b.price as pricer 
    , b.cost as costr, b.description as descr 
    from (select x.*, row_number() over (order by id) as rn 
      from my_table x 
      where color = 'blue' 
       ) a 
    full outer join ( 
     select x.*, row_number() over (order by id) as rn 
      from my_table x 
      where color = 'red' 
       ) b 
    on a.rn = b.rn 

SQL Fiddle

ROW_NUMBER() аналитическая функция дает вам то, чтобы присоединиться, и с помощью FULL OUTER JOIN это не имеет значения, если один цвет имеет более строк, чем другой.


Ах, и теперь вы добавили в код разные имена столбцов! Принцип должен быть точно таким же; ваши текущие запросы становятся подзапросами, которые у меня есть здесь.

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