【问题标题】:Unpivot on a column that has dash on it取消透视带有破折号的列
【发布时间】:2014-08-12 14:15:01
【问题描述】:

这是我在 SQL Server 2008 R2 中的查询:

INSERT VMP_Staging_Products_Temporary
    (FRM_ID, ITEM_ID, ItemDesc, NUMBER_ITEM)
    SELECT upvt.FARM_ID,
    p.REC_ITEM_CODE,
    p.REC_ITEM_NAME_A,
    upvt.NUMBER_ITEM
    FROM VMP_Staging  AS f
    UNPIVOT
    (
        NUMBER_ITEM
        FOR ItemDesc IN ([KHALAS], [FARDH], [OTHER_LULU], [KHENAIZI], [BOUMAAN], [BARHI], [JESH_KHARMA], [REZIZ]
        , [JABRI], [ANBARET_AL_MADINA], [SHISHI], [DABBAS], [NABTET_SAIF], [KHEDRAWI], [HILALI], [MAKTOUMY]
        , [NAMISHI], [SULTANAH], [BAQLAT_AL_TAWAA], [BAQLAT_AL_DAHLA], [BAQLAT_AL_RARENJA], [SUKARY], [SAQEI], [ABU_ZEBED]
        , [MAJDOUL], [SHABIBI], [YOUWANI], [YARDI], [KHADI], [HATIMI], [NEGHAL], [OTHER_SAYER])
    ) AS upvt
    INNER JOIN REC_ITEM AS P
    on p.REC_ITEM_NAME_A  = upvt.ItemDesc

如您所见,我正在 REC_ITEM 表和 unpivot 的结果之间进行连接。

问题发生在具有_ 的列名中,例如ABU_ZEBED,其中REC_ITEM 中的值是abu zebed

请问如何解决?

更新 1

如果有办法使用 c# 代码做到这一点,那也很好。因为这是一个从 c# 调用的存储过程,所以如果在 c# 中有解决方案来处理这个问题,我也想要。

【问题讨论】:

    标签: c# sql sql-server sql-server-2008-r2


    【解决方案1】:

    取决于它是否是常规模式,但至少:

    INNER JOIN REC_ITEM AS P
        on replace(p.REC_ITEM_NAME_A, ' ', '_')  = upvt.ItemDesc
    

    但性能会很糟糕。

    【讨论】:

    • 没有办法改变 unpivot 的结果吗?
    • 你的解决方案仍然给我 22 个结果而不是 31 个
    • @AgnieszkaPolec - 你确定 REC_ITEM 中的这些字符确实是空格(即char(32))吗?尝试检查其内容,例如:select sq.Orig, sq.Upd, case when sq.Orig = sq.Upd then 1 end as [Equal] from ( select r.rec_item_name_a as [Orig], replace(r.rec_item_name_a, char(32), char(95)) as [Upd] from rec_item r ) sq;
    • 请忽略上一个。这应该有效:select * from rec_item where rec_item_name_a = 'ABU' + char(32) + 'ZEBED'; 如果出现任何情况,则表示名称部分之间确实存在普通空格;如果不是,那就是其他角色。
    【解决方案2】:

    您可以尝试多种方式加入:

    on p.REC_ITEM_NAME_A = upvt.ItemDesc or
       p.REC_ITEM_NAME_A = replace(upvt.ItemDesc, '_', ' ')
    

    或者,删除两边的空格和下划线:

    on replace(replace(p.REC_ITEM_NAME_A, '_', ''), ' ', '') =
       replace(replace(upvt.ItemDesc, '_', ''), ' ', '')
    

    【讨论】:

    • 我尝试了你的第一个解决方案,但还是一样,我得到了 22 个值而不是 31 个值
    • 性能不好,有没有办法纠正unpivot的结果?
    猜你喜欢
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2018-07-27
    相关资源
    最近更新 更多