2013-02-18 6 views
0

У меня есть таблица в SQL Server 2008 в формате, как показано ниже (упрощенный формат):SQL - Pivot/Unpivot?

Date Miles Cost

Я хочу, чтобы получить результат, как

  Previous Week  Current Week Variance 
Miles   

Cost

Как я могу добиться этого? Нужна ли мне сводная/невольная или какой самый простой и эффективный способ достичь этого. Благодарю.

+0

Не похоже, вам нужен стержень для этого на всех , – Kermit

+0

Как я могу это достичь? Предпочитал бы иметь более простой SQL без нескольких Unions и присоединяется. – devSuper

ответ

0
SELECT 'Miles' AS Type, SUM(CASE WHEN date = lastweek THEN miles ELSE 0 END) as lastweek 
, SUM(CASE WHEN date = thisweek THEN miles ELSE 0 END) as thisweek 
SUM(CASE WHEN date = lastweek THEN miles ELSE 0 END) - SUM(CASE WHEN date = thisweek THEN miles ELSE 0 END) as variance 
FROM yourtable 
UNION 
SELECT 'Cost' AS Type, SUM(CASE WHEN date = lastweek THEN cost ELSE 0 END) as lastweek 
, SUM(CASE WHEN date = thisweek THEN cost ELSE 0 END) as thisweek 
SUM(CASE WHEN date = lastweek THEN cost ELSE 0 END) - SUM(CASE WHEN date = thisweek THEN cost ELSE 0 END) as variance 
FROM yourtable 

Это не 100% правильно, но синтаксис должен быть правильным и вы должны получить довольно близко к тому, что вы ищете

+0

Вы сделали это простым. Я начал с Joins и думал, что у меня получится уродливый код. Я вижу, как он работает, будет работать над этим. Спасибо :) – devSuper

+0

Я бы порекомендовал использовать 'UNION ALL' vs' UNION', поскольку он быстрее. – Kermit