使用案例表达式将数据插入到表中



在我收到的邮政编码文档中,每个邮政编码都应该有DMA(直接营销区域);但是,DMA的一些值是"。为了解决这个问题,我应该为邮政编码的县获取最常见的DMA,并将其放入邮政编码的DMA。

目前,我已经弄清楚了如何确定每个县DMA的最大发生次数。例如,我知道在阿比维尔县,最常见的DMA出现5次,而对于阿卡迪亚,它是10次。此数据存储在使用以下代码创建的临时表 #Temp2 中:

INSERT INTO #Temp
SELECT ROW_NUMBER() OVER(PARTITION BY County, DMA ORDER BY County DESC) AS Num, County, DMA
FROM [HPW Data].[dbo].[Zip_Codes_All]
WHERE DMA <> '<NULL>'
INSERT INTO #Temp2 
SELECT DISTINCT MAX(Num), County
FROM #Temp 
GROUP BY County

我通过在将邮政编码表划分为包含县、DMA 和 Num(这是任何县、DMA 组合的出现次数)后找到最大行数来实现这一点

之后,我编写了此代码,试图将邮政编码表中的"值替换为他们县最常见的 DMA

INSERT INTO [HPW Data].[dbo].[Zip_Codes_All]
SELECT Zip_Code, c.County, 
CASE c.DMA
WHEN '<NULL>' THEN (SELECT d.DMA WHERE c.County = d.County)
ELSE c.DMA END AS DMA
FROM [HPW Data].[dbo].[Zip_Codes_All] AS c,
(SELECT a.County, DMA FROM #Temp AS a, #Temp2 AS b WHERE a.Num = b.Num AND a.County = b.County) AS d

我认为它没有按预期工作的部分原因是因为一些 DMA 是各县中出现最多的 DMA(例如:阿代尔县有三个 DMA 出现五次,任何 DMA 出现最多的是五次)。

我对此进行了快速尝试,我认为您的部分问题是 1990 年代JOIN语法?

WITH ZipCodeDMAs AS (
SELECT 
County, 
DMA,
COUNT(*) AS freq
FROM 
[HPW Data].dbo.Zip_Codes_All
WHERE 
DMA != '<NULL>'
GROUP BY
County,
DMA),
MaxDMA AS (
SELECT
County,
DMA,
ROW_NUMBER() OVER (PARTITION BY County ORDER BY freq DESC) AS order_id
FROM
ZipCodeDMAs)
INSERT INTO 
[HPW Data].dbo.Zip_Codes_All
SELECT 
Zip_Code, 
c.County, 
ISNULL(c.DMA, m.DMA) AS DMA
FROM 
[HPW Data].dbo.Zip_Codes_All c
INNER JOIN MaxDMA m ON m.County = c.County AND m.order_id = 1;

这将使用两个 CTE 来: - 获取县DMA元组的频率; - 确定每个县最常用的 DMA(允许平局 - "随机"选择一个)。

然后,这只是在数据中没有DMA的情况下交换最常见的DMA的情况。 这假设您的数据永远不会包含我们以前从未使用 DMA 的"新"县,否则INNER JOINs将中断查询。

我并没有真正遵循您的示例,您似乎正在使用ROW_NUMBER()来提出一些次优的方法来计算频率,然后在代码的其余部分中使用它。 另外SELECT * FROM a, b, c大约20年前就过时了!!

最新更新