2015-05-13 7 views
1

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

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

enter image description here (имена столбцов в верхнем ряду)

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

enter image description here

Может кто-нибудь, пожалуйста, помогите мне с правильным кодом для использования, чтобы получить результаты, которые мне нужны? Я не могу просто переносить через Excel, потому что данные динамические.

EDIT: Я попробовал этот код:

SELECT [Gift Level], Goal 
FROM 
( SELECT * FROM GiftPyramidDollars) 
AS Result 
Unpivot 
(Goal for [Gift Level] in ([< $25,000], [$25,000], [$50,000], [$100,000], [$200,000], [$250,000], [$500,000], [$1,000,000], [$2,500,000], [$5,000,000], [$10,000,000]) 
) 
AS UnPvt 

Но это не отдельные результаты в две колонки. Это то, что я получаю:

Gift Level  Goal 
< $25,000 0.00 
$25,000   0.00 
$50,000   0.00 
$100,000 8000000.00 
$200,000 10000000.00 
$250,000 6250000.00 
$500,000 12500000.00 
$1,000,000 30000000.00 
$2,500,000 12500000.00 
$5,000,000 10000000.00 
$10,000,000 10000000.00 
< $25,000 58126.67 
$25,000   260687.75 
$50,000   394300.00 
$100,000 352233.61 
$200,000 800000.00 
$250,000 2110000.00 
$500,000 4603423.93 
$1,000,000 11500000.00 
$2,500,000 0.00 
$5,000,000 5000000.00 
$10,000,000 0.00 
+0

вы хотите UNPIVOT. – mikey

+0

Не могли бы вы уточнить? Сегодня утром я читал о UNPIVOT и пробовал, но не могу понять, что код понял. – Tracey

+0

Я разместил запись в блоге (https://hiflitetm.wordpress.com/2013/11/02/pivot/). В нем есть несколько простых примеров, которые могут соответствовать вашей ситуации. Синтаксис может быть специфическим для Oracle. Обратите внимание, что другие плакаты правильные: вы намерены сделать «univot». – YoYo

ответ

0
SELECT B.[Gift Level] 
    , [$ Goal] = MAX(CASE B.Campaign WHEN '$ Goal' THEN B.Goal END) 
    , [$ Raised to Date] = MAX(CASE B.Campaign WHEN '$ Raised to Date' THEN B.Goal END) 
FROM GiftPyramidDollars A 
UNPIVOT(A.Goal FOR [Gift Level] IN (
    [< $25,000] 
    , [$25,000] 
    , [$50,000] 
    , [$100,000] 
    , [$200,000] 
    , [$250,000] 
    , [$500,000] 
    , [$1,000,000] 
    , [$2,500,000] 
    , [$5,000,000] 
    , [$10,000,000]) 
) B 
GROUP BY B.[Gift Level]