2014-02-28 5 views
2

Я попытался найти ответы на все вопросы, но никто не ответил на мою точную проблему. У меня есть то, что должно быть относительно простым запросом. Тем не менее, я очень новый и до сих пор изучаю SQL.
Мне нужно запросить два столбца с разными датами. Я хочу вернуть строки с текущим количеством учетных записей и текущим непогашенным балансом и в том же запросе, вернуть строки для тех же столбцов с данными за 90 дней до этого. Таким образом, мы можем видеть, сколько количество счетов и баланса увеличилось за последние 90 дней. Оптимально, я ищу результаты следующим образом:SQL - запрос одного и того же столбца дважды с разными датами в where, где пункт

PropCode|PropCat|Accts|AcctBal|PriorAccts|PriorBal| 
---------------------------------------------------- 
77  |Comm | 350 | 1,000| 275  | 750 

Ниже приводится мой начальный запрос. Я понимаю, что это совершенно неправильно, но я пробовал много разных попыток решения, но никто не работает для моей конкретной проблемы. Я включил его, чтобы дать представление о моих потребностях. Акты & Столбцы AcctBal будут содержать данные 1/31/14. Столбец PriorAcct & PriorBal будет содержать данные 10/31/13.

select 
prop_code AS PropCode, 
prop_cat, 
COUNT(act_num) Accts, 
SUM(act_bal) AcctBal, 

(SELECT 
COUNT(act_num) 
FROM table1 
where date = '10/31/13' 
and Pro_Group in ('BB','FF') 
and prop_cat not in ('retail', 'personal') 
and Not (Acct_Code = 53 and ACTType in (1,2,3,4,5,6,7)) 
) 
AS PriorAccts, 

(SELECT 
SUM(act_bal) 
FROM table1 
where date = '10/31/13' 
and Pro_Group in ('BB','FF') 
and prop_cat not in ('retail', 'personal') 
and Not (Acct_Code = 53 and ACTType in (1,2,3,4,5,6,7)) 
) 
AS PriorBal 


from table1 
where date = '01/31/14' 
and Pro_Group in ('BB','FF') 
and prop_cat not in ('retail', 'personal') 
and Not (Acct_Code = 53 and ACTType in (1,2,3,4,5,6,7)) 
group by prop_code, prop_cat 
order by prop_cat 
+1

Вы используете MySQL или SQL Server? Пожалуйста, отметьте вопрос соответствующим образом. –

+0

Используйте PIVOT для этого –

+0

SQL Server. Извиняюсь за мою неклейку. –

ответ

2

Вы можете использовать CASE с агрегатами для этого (по крайней мере, в SQL Server, не уверен, о MySQL):

... 
COUNT(CASE WHEN date='1/31/14' THEN act_num ELSE NULL END) as 'Accts' 
,SUM(CASE WHEN date='1/31/14' THEN act_bal ELSE NULL END) as 'AcctBal' 
,COUNT(CASE WHEN date='10/31/13' THEN act_num ELSE NULL END) as 'PriorAccts' 
,SUM(CASE WHEN date='10/31/13' THEN act_bal ELSE NULL END) as 'PriorAcctBal' 
.... 
WHERE Date IN ('1/31/14', '10/31/13') 
+0

Спасибо! Вы не только решили это, но и очистили несколько ненужных подзапросов из предыдущего внутреннего решения и сделали его более логичным для новичков SQL, чтобы понять. –

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