在其上有破折号的列上取消透视

时间:2014-08-12 14:15:02

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

这是我在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#中处理这个问题,我也希望如此。

2 个答案:

答案 0 :(得分:1)

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

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

但是,表演会很糟糕。

答案 1 :(得分:0)

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

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, '_', ''), ' ', '')