Как я могу избавиться от избыточных значений из столбца? - PullRequest
4 голосов
/ 24 сентября 2010

Это пример выходных данных alt text

Позвольте мне объяснить, что происходит:

Запрос возвращает все счета-фактуры за каждый год вместе с продуктами, участвующими в счете-фактуре.

Как вы видите, у нас есть два счета в 2010 году ... Это счета-фактуры 30463 и 30516. Счет-фактура 30463 состоит из 4 продуктов, его стоимость доставки составляет 105,88.Как вы видите, цена доставки повторяется для каждого продукта, что вызывает проблемы, когда я вычисляю сумму на уровне отчетности.4 товара по счету № 30463 имеют общую стоимость доставки 105,00.Я хочу, чтобы каждая цена доставки каждого счета отображалась только один раз, независимо от количества товаров в счете.Как мне этого добиться?

ЗДЕСЬ ЗАПРОС:

SELECT 
      DATEPART(year, CustomerInvDetail.sentDate) AS "Year", 
      CustomerInvoice.cuInvoiceID,  
      Product.productName, 
      CustomerQuoteProducts.unitPrice, 
      CustomerQuoteProducts.qty, 
      CustomerQuoteProducts.qty * CustomerQuoteProducts.unitPrice AS "Price",
      CustomerShipping.shippingPrice
FROM  CustomerInvoice INNER JOIN CustomerInvDetail 
      ON CustomerInvoice.cuInvoiceID = CustomerInvDetail.cuInvoiceID
      INNER JOIN CustomerQuote 
      ON CustomerQuote.customerQuoteID = CustomerInvoice.customerQuoteID
      INNER JOIN CustomerQuoteProducts 
      ON CustomerQuoteProducts.customerQuoteID = CustomerQuote.customerQuoteID
      INNER JOIN CustomerShipping 
      ON CustomerShipping.customerQuoteID = CustomerInvoice.customerQuoteID
      INNER JOIN Customer 
      ON Customer.customerID = CustomerQuote.customerID
      INNER JOIN Product 
      ON CustomerQuoteProducts.productID = Product.productID
WHERE (DATEPART(year, CustomerInvDetail.sentDate) BETWEEN 2001 AND 2022) AND (Customer.customerID = 500)

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

Возможно, что-то в этом духе? ​​

case when row_number() over(partition by cuInvoiceId order by newid()) = 1 then shippingPrice end

Обновление

Что это такое:

  1. Делит данныена разделы в зависимости от значения cuInvoiceId
  2. Теперь внутри этого раздела мы хотим перечислить каждую строку, но привязать к ней нечего, поэтому я использовал newid(), что в основном означает перечисление этих строк случайным образом.
  3. И, наконец, с case ... = 1 Я хочу, чтобы самый первый ряд отображал shippingPrice, а все остальные - null.
0 голосов
/ 24 сентября 2010

Как насчет заявления о цене доставки, когда это первый товар? Я предполагаю, что у вас есть элемент строки или какой-то способ определения первого элемента в счете-фактуре - затем

случай, когда lineno = 1, тогда CustomerShipping.shippingPrice иначе 0 end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...