2015-12-03 5 views
0

друзья: У меня теперь есть проблема с условными вычислениями в SQL Server. я установить некоторые данные из SQL Server в качестве примера в Excel, как это:Условные вычисления в SQL Server

No Employee Month Commission1 Commission2 
1  A   Jan  10   5 
2  A   Jan  10   4 
3  B   Jan  15   3 
4  B   Jan  15   4 
5  C   Jan  10   3 
6  C   Jan  10   4 
7  D   Jan  13   3 
8  D   Jan  13   4 
9  DM  Jan  0   6 
10 DM  Jan  0   8 
11 A   Feb  15   4 
12 A   Feb  15   5 
13 B   Feb  20   5 
14 B   Feb  20   4 
15 C   Feb  9   3 
16 C   Feb  9   4 
17 D   Feb  14   5 
18 D   Feb  14   6 
19 DM  Feb  0   13 
20 DM  Feb  0   10 

И результат я хочу, как это:

Employee Jan    No#  Feb    No# 
A   20    2  30    2 
B   30    2  40    2 
C   20    2  18    2 
D   26    2  28    2 
DM   44    10  59    10 

Для каждых продаж, Сотрудник A, B, C , D только комиссия 1 в качестве оплаты, комиссия 2 для DM. Итак, в январе комиссия DM - SUM (E2: E9)

Я могу сделать это легко в Excel, но как это сделать на сервере sql?

, чтобы мой попробовать следующий код:

И я получаю результат

Employee Month Commission No# 
A   Jan  20   2 
B   Jan  30   2 
C   Jan  20   2 
D   Jan  26   2 
DM   Jan  44   10 
A   Feb  30   2 
B   Feb  40   2 
C   Feb  18   2 
D   Feb  28   2 
DM   Feb  59   10 

Формат результата не то, что я попытался want.I стержень после этого запроса, но не удалось, кажется, я могу только развернуть одно состояние?

Другой вопрос: если я хочу, чтобы автоматический рост месяца (в реальных данных есть не только январь и февраль) в результате, а не писать [Jan], [Feb], [Mar] ... в сводный код, как это сделать?

Кто может мне помочь?

Спасибо!

+2

Ваши фотографии данных делает его очень трудно создать Testdata для того, чтобы решить вашу проблему. Нельзя использовать вырезать и вставить –

+0

@ t-clausen.dk это нормально? Мне очень жаль, что я не знаю, как организовать свою страницу ... и как предоставить хорошие данные формата. –

+0

Я отредактировал формат вашего вопроса и удалил лишние фотографии. Вы также должны включить свою попытку решить эту проблему. –

ответ

1

Вот PIVOT решение:

Тестовые данные:

DECLARE @t table(Employee varchar(2), Month char(3), Commission1 int, Commission2 int) 
INSERT @t values 
('A','Jan',10,5),('A','Jan',10,4),('B','Jan',15,3), 
('B','Jan',15,4),('C','Jan',10,3),('C','Jan',10,4), 
('D','Jan',13,3),('D','Jan',13,4),('DM','Jan',0,6), 
('DM','Jan',0,8),('A','Feb',15,4),('A','Feb',15,5), 
('B','Feb',20,5),('B','Feb',20,4),('C','Feb',9,3), 
('C','Feb',9,4 ),('D','Feb',14,5),('D','Feb',14,6), 
('DM','Feb',0,13),('DM','Feb',0,10) 

Запрос:

;WITH CTE as 
( 
SELECT 
    Employee, Month, 
    CASE WHEN Employee = 'DM' THEN 
    SUM(Commission2) over (partition by [Month]) 
    ELSE Commission1 END com, 
    CASE WHEN Employee = 'DM' 
    THEN row_number() over 
     (PARTITION BY Employee, [Month] ORDER BY (SELECT 1)) ELSE 1 END rn 
FROM @t 
) 
SELECT Employee, [Jan], [Feb], [Mar] -- add more months 
FROM 
CTE 
PIVOT 
(SUM(com) 
FOR [Month] IN ([Jan], [Feb], [Mar])) AS pvt -- add more months 
WHERE rn = 1 

Результат:

Employee Jan Feb Mar 
A   20 30 NULL 
B   30 40 NULL 
C   20 18 NULL 
D   26 28 NULL 
DM   44 59 NULL 
+0

Большое спасибо! Но я изменил некоторые запросы, как мне сделать это с помощью двух столбцов? –

+0

Это огромное изменение, вы не должны изменять требования к вопросу после его публикации, что делает все ответы недействительными –

+0

ОК, получите его! Я больше не буду этого делать! Но можете ли вы помочь мне снова в этом вопросе? Большое спасибо! –

0

В SqlServer вы можете сделать это с помощью оператора PIVOT, как, как показано ниже:
Пожалуйста, обратитесь PIVOT синтаксис

select tmp.employee,pv.[jan] as Jan_Commission, pv.[feb] as Feb_Commission from 

(
select employee,month,commission1 from table_name 

)tmp 
pivot (
sum(commission1) 
for [month] in ([jan],[feb]) 

)pv; 
+0

Downvoter pls упоминает причину, поэтому мы исправим код – Chanukya

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