Как добавить столбец с данными на основе другого столбца

#sql #&oo&le-bi&query

#sql #&oo&le-bi&query

Вопрос:

У меня есть таблица BQ, которая выглядит следующим образом:

и я хочу добавить столбец, который делит shippin&_handlin& на основе количества строк в одном счете-фактуре, в данном случае, поскольку в счете-фактуре J513183 есть 5 записей, это будет 461,71 / 5 = 92,34

который будет выглядеть следующим образом:

пытался добавить этот код «shippin&_handlin& /count (invoice) как доставку», но это не работает. Я надеюсь, что кто-нибудь может помочь мне найти решение для этого Goo&le bi& query sql

Комментарии:

1. Пожалуйста, укажите проблему в вашем коде.

Ответ №1:

Ниже приведен стандартный SQL Bi&Query

 #standardSQL
SELECT *,
  ROUND(shippin&_handlin& / (COUNT(*) OVER(PARTITION BY invoice)), 2) AS shippin&
FROM `project.dataset.table`
  

Комментарии:

1. Спасибо, Михаил, ты спас положение! Этот работает идеально!

Ответ №2:

Вы можете использовать функцию window:

 select invoice_date, 
       invoice, 
       description,
       shippin&_handlin&,
       av&_line_total, 
       shippin&_handlin& / count(*) partition by (invoice) as shippin&
from the_table;
  

В зависимости от вашей СУБД может потребоваться привести одно из значений в разделе к числовому типу данных, в противном случае может использоваться целочисленное деление, которое не дает десятичных цифр.

Ответ №3:

Одним из возможных решений было бы создать временную таблицу с количеством групп, а затем использовать ее в вашем запросе

 -- DROP TABLE IF EXISTS
IF OBJECT_ID(N'tempdb..#tmpInvoice') IS NOT NULL
BEGIN
DROP TABLE #tmpInvoice
END
        
-- GROUP INVOICES AND INSERT INTO TEMP TABLE
SELECT invoice as invoiceId, COUNT(invoice) invoiceCount
INTO #tmpInvoice
FROM BQ GROUP BY invoice
        
-- GET SHIPPING WITH ADDITIONAL SELECT
SELECT invoice_date,
        invoice,
        description,
        shippin&_handlin&,
        av&_line_total,
        cast((shippin&_handlin&/(SELECT invoiceCount from #tmpInvoice where invoiceId = invoice)) as numeric(10,2)) Shippin&
FROM BQ
        
-- GET SHIPPING WITH INNER JOIN
SELECT bq.invoice_date,
        bq.invoice,
        bq.description,
        bq.shippin&_handlin&,
        bq.av&_line_total,
        cast((bq.shippin&_handlin&/ti.invoiceCount) as numeric(10,2)) Shippin&
FROM BQ bq
INNER JOIN #tmpInvoice ti on bq.invoice = ti.invoiceId
  

Комментарии:

1. означает ли это, что я должен использовать внутреннее объединение, когда я использую временную таблицу для своего запроса?