2012-03-13 2 views
0

Я ищу данные для продажи билетов. Мне нужно увидеть все билеты по сделкам, где была применена скидка как минимум на один билет. Разрешается только одна скидка за транзакцию, хотя у нескольких билетов может быть такая скидка. (Например, скидка ААА может быть применена к 4 взрослым билетам, хотя можно приобрести больше билетов. Мне нужны данные обо всех купленных билетах, когда была использована скидка ААА.)Добавление поля к представлению на основе другой строки в группе

Конечные пользователи получат доступ к данным в представление через Excel, затем поворот и срез на основе типа скидки и даты. При создании представления, как я могу применить код скидки из одной строки билета ко всем билетам в транзакции?

SELECT 
    JnlTickets.TransNo, 
    JnlHeaders.FiscalDate, 
    JnlTickets.DiscNo AS DiscountNumber, 
    LEFT(JnlHeaders.agency,1) AS Agency, 
    Discounts.Name 

FROM dbo.JnlHeaders (nolock) 
    LEFT JOIN dbo.JnlTickets (nolock) 
     ON dbo.JnlHeaders.TranNo=dbo.JnlTickets.TransNo 
    LEFT JOIN dbo.Discounts (nolock) 
     ON dbo.JnlTickets.DiscNo=dbo.DISCOUNTS.DiscountID 

GROUP BY JnlTickets.TransNo, 
     JnlTickets.DiscNo, 
     JnlHeaders.FiscalDate, 
     LEFT(JnlHeaders.agency,1), 
     Jnltickets.coupons, 
     Discounts.Name 
HAVING(JnlHeaders.FiscalDate BETWEEN '2012-03-07' AND '2012-03-08') 
    AND 
    (Jnltickets.transno IN (SELECT JnlTickets.TransNo 
          FROM JnlTickets 
          WHERE JnlTickets.DiscNo > '1')); 

ответ

0

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

Примечание: последняя часть фильтров исключает все транзакции, в которых не применяется скидка. Это теперь можно достичь, изменив левое соединение производной таблицы на внутреннее соединение.

SELECT 
    JnlTickets.TransNo, 
    JnlHeaders.FiscalDate, 
    TransactionsWithDiscounts.DiscNo AS DiscountNumber, 
    LEFT(JnlHeaders.agency,1) AS Agency, 
    TransactionsWithDiscounts.Name 

FROM dbo.JnlHeaders (nolock) 
    LEFT JOIN dbo.JnlTickets (nolock) 
     ON dbo.JnlHeaders.TranNo=dbo.JnlTickets.TransNo 
    left join 
    (
     select distinct JnlTickets.TransNo, JnlTickets.DiscNo, Discounts.Name 
     from dbo.JnlTickets (nolock) 
      LEFT JOIN dbo.Discounts (nolock) 
       ON dbo.JnlTickets.DiscNo = dbo.DISCOUNTS.DiscountID 
     where JnlTickets.DiscNo > '1' -- or is not null? 
    ) TransactionsWithDiscounts 
     ON JnlTickets.TransNo = TransactionsWithDiscounts.TransNo 
GROUP BY JnlTickets.TransNo, 
     TransactionsWithDiscounts.DiscNo, 
     JnlHeaders.FiscalDate, 
     LEFT(JnlHeaders.agency,1), 
     Jnltickets.coupons, 
     TransactionsWithDiscounts.Name 
HAVING(JnlHeaders.FiscalDate BETWEEN '2012-03-07' AND '2012-03-08') 
    AND 
    (Jnltickets.transno IN (SELECT JnlTickets.TransNo 
          FROM JnlTickets 
          WHERE JnlTickets.DiscNo > '1')); 
Смежные вопросы