这是这个问题的补充,我问过将整数除以指定值的计数: SQL UPDATE: integer divided by count of a specified value
我正在尝试调整它以根据不同值的计数来划分整数。
示例:Shipping_State
中每个不同事件的10,000美元运费将平均分配给该不同事件中的记录数。该值将显示在“成本”列中。
因此,对于说俄亥俄州的5条记录,费用为每个2000.0000,德克萨斯州的10条记录将分别返回1000.0000,加州42条记录,每条238.0952等。
CustomerTable
Shipping_State nchar, Cost decimal(18,4)
我做了一些徒劳的努力,这是一次尝试:
UPDATE CustomerTable
SET Cost = (SELECT 10000.00 / count(*)
FROM CustomerTable
WHERE CustomerTable.Shipping_state = COUNT(DISTINCT CustomerTable.Shipping_State)
WHERE CustomerTable.Shipping_State = COUNT(DISTINCT CustomerTable.Shipping_State;
我收到此错误:
Msg 147,Level 15,State 1,Line 5
除非是聚合,否则聚合可能不会出现在WHERE子句中 在HAVING子句或选择列表中包含的子查询中, 被聚合的列是外部引用。
答案 0 :(得分:1)
我认为这就是你要找的东西:
UPDATE CustomerTable
SET Cost = (SELECT 10000.00 / count(*)
FROM CustomerTable ct2
WHERE CustomerTable.Shipping_state = ct2.Shipping_State
);
我认为您对我之前的问题的解决方案更好,但没有where
:
with toupdate as (
select ct.*, count(*) over (partition by ct.Shipping_State, month(ct.Shipping_Date)) as cnt
from CustomerTable
)
update toupdate
set Cost = cast(10000 as float) / cnt;
编辑:
如果您不想要日期,只需将其从partition by
子句中删除:
with toupdate as (
select ct.*, count(*) over (partition by ct.Shipping_State) as cnt
from CustomerTable
)
update toupdate
set Cost = cast(10000 as float) / cnt;