#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. означает ли это, что я должен использовать внутреннее объединение, когда я использую временную таблицу для своего запроса?