簡體   English   中英

使用case表達式將數據插入表中

[英]Inserting data into a table with a case expression

在我收到的郵政編碼文件中,應該為每個郵政編碼提供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

在將郵政編碼表划分為包含County,DMA和Num的段(這是任何County,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並列(例如:Adair County的三個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來:-獲取County-DMA元組的頻率; -確定每個縣最頻繁的DMA(允許聯系-在“隨機”中選擇一個)。

這只是在我們的數據中沒有一個的情況下,在最頻繁的DMA中進行交換的情況。 這假定您的數據將永遠不會有我們以前從未擁有過DMA的“新”縣,否則INNER JOINs將中斷查詢。

我並沒有真正遵循您的示例,您似乎正在使用ROW_NUMBER()提出一些次優的計數頻率方法,然后在其余的代碼中使用該方法。 SELECT * FROM a, b, c大約在20年前就過時了!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM