Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос  [new]
запросик
Guest
Привет
Есть такая таблица

StoreID    Date          SaleTypeId     SalesQty

  1        01/10/2012       1             10
  1        01/10/2012       2             20
  1        01/10/2012       3             30


группировка по StoreID Date SaleTypeId

Надо добавить к результату

  
  1        01/10/2012       4         SalesQty(SaleTypeId = 1) + SalesQty(SaleTypeId = 2)
  1        01/10/2012       5         (SalesQty(SaleTypeId = 1) + SalesQty(SaleTypeId = 2)) / SalesQty(SaleTypeId = 3)
28 янв 13, 11:52    [13838121]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
запросик,

UNION?
28 янв 13, 12:37    [13838450]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
запросик
Guest
hallabud
запросик,

UNION?


непонятно как получить

 (SalesQty(SaleTypeId = 1) + SalesQty(SaleTypeId = 2)) / SalesQty(SaleTypeId = 3)
28 янв 13, 17:10    [13840644]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
Использовать case и sum()
28 янв 13, 17:13    [13840665]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
запросик,

UNION ALL + SUM(CASE WHEN THEN ELSE END)
28 янв 13, 17:14    [13840675]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
запросик
Guest
iap
запросик,

UNION ALL + SUM(CASE WHEN THEN ELSE END)


возвращается лишняя строка.
не могли бы примером показать?
28 янв 13, 17:44    [13840842]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
Было бы проще, если бы вы показали ваш запрос и лишнюю строку, которая возвращается

Можно так например получить:
+ sql
DECLARE @T TABLE (StoreID INT, Date DATETIME, SaleTypeId INT, SalesQty INT);

INSERT INTO @T
SELECT 1, '2012-10-01', 1, 10
UNION
SELECT 1, '2012-10-01', 2, 20
UNION
SELECT 1, '2012-10-01', 3, 30;

DECLARE @Type4sales INT;
DECLARE @Type5sales INT;

SELECT @Type4sales = SUM(SalesQty) FROM @T WHERE SaleTypeId IN (1,2);
SELECT @Type5sales = @Type4sales / SUM(SalesQty) FROM @T WHERE SaleTypeId = 3;

SELECT * FROM @T
UNION
SELECT 1, '2012-10-01', 4, @Type4sales
UNION
SELECT 1, '2012-10-01', 5, @Type5sales;
28 янв 13, 17:49    [13840875]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
запросик
Guest
пример был упрощен. много полей группировки и много значений.
так что делать селект для переменной - не айс
28 янв 13, 17:53    [13840898]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
ну тогда, как говорится, звыняйте :)
28 янв 13, 17:54    [13840906]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
declare @t table(StoreID int, SaleTypeId int, SalesQty decimal(10,2))
insert @t values (1,1,50)
insert @t values (1,2,20)
insert @t values (1,3,30)

select storeid, saletypeid, case when grp1=0 and grp2=0 then isnull(x,y) when grp1=0 and grp2=1 then x when grp1=1 and grp2=1 then x/y end
from(
select storeid, saletypeid, sum(case when saletypeid in(1,2) then salesqty end) x, sum(case when saletypeid in(3) then salesqty end) y,
grouping(storeid) as grp1,
grouping(saletypeid) as grp2
 from @t
group by storeid, saletypeid with rollup 
) as a
28 янв 13, 18:07    [13840984]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
запросик
Guest
Glory
...


Thanks!!
28 янв 13, 18:17    [13841053]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить