在MS SQL

时间:2017-12-18 16:06:37

标签: sql sql-server tsql select

有一个像

这样的选择语句
select 
SouceField_A  
+ 'DeliminiterCharacter'
+ SouceField_A
+ 'DeliminiterCharacter'
+ SourceField_B
+ 'DeliminiterCharacter'
...

问题是,在现实生活中我没有一个简单的领域,但有案例时......结束。这使得它容易出错,并且在需要更改时难以使两个位置保持最新。 为此,我想知道是否有一种简单的方法可以将其变为变量等。

以下是对Show

的查询的一部分
select 
ISNULL ( Oracle_Update , 'create' )  + '~' +
@Email + '~' +
@ItemNo + '~' +
''  + '~' +
'D'  + '~' +
ISNULL ( Item_Desc_DE , '' )  + '~' +
REPLACE(REPLACE(ISNULL ( Item_Specification_DE , '' ), CHAR(13), ''), CHAR   (10), ' $#') + '~' +    
ISNULL ( Item_Copy_From, '' ) + '~' +
 -- master template
 CASE WHEN Oracle_Update like 'update' OR item_copy_from is not NULL
THEN 
    ''
    ELSE  ISNULL ( Item_Template , 'MAG Assembly' )
END         + '~' +
CASE WHEN Oracle_Update like 'update' OR item_copy_from is not NULL 
THEN 
    ''
    ELSE  ISNULL 

2 个答案:

答案 0 :(得分:0)

只需使用嵌套查询:

select 
SouceField_A  
+ 'DeliminiterCharacter'
+ SouceField_A
+ 'DeliminiterCharacter'
+ SourceField_B
+ 'DeliminiterCharacter' 
FROM (
SELECT CASE ... ) AS t

答案 1 :(得分:0)

您可以使用派生表,其中此表在FROM子句中定义。我已将长列代码SourceField_ASourceField_B列为长代码。派生表是别名dT。为清楚起见,SELECT子句可以使用列名前面的别名。例如,dT.SourceField_A

SELECT dT.SourceField_A
     + 'DeliminiterCharacter'
     + dT.SourceField_A
     + 'DeliminiterCharacter'
     + dT.SourceField_B
     + 'DeliminiterCharacter'

  FROM (
         ISNULL ( Oracle_Update , 'create' )  + '~' +
         @Email + '~' +
         @ItemNo + '~' +
         ''  + '~' +
         'D'  + '~' +
         ISNULL ( Item_Desc_DE , '' )  + '~' +
         REPLACE(REPLACE(ISNULL ( Item_Specification_DE , '' ), CHAR(13), ''), CHAR   (10), ' $#') + '~' +    
         ISNULL ( Item_Copy_From, '' ) + '~' +
         -- master template
          CASE WHEN Oracle_Update like 'update' OR item_copy_from is not NULL
          THEN 
            ''
          ELSE  ISNULL ( Item_Template , 'MAG Assembly' )
          END         + '~' +
          CASE WHEN Oracle_Update like 'update' OR item_copy_from is not NULL 
          THEN 
            ''
            ELSE  ISNULL 
           ... 
            AS SourceField_A

           ,... 
            AS SourceField_B
       ) AS dT