在MS SQL中选择两次相同的列

问题描述 投票:0回答:2

有一个选择声明

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 
sql sql-server tsql select
2个回答
0
投票

只需使用嵌套查询:

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

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
© www.soinside.com 2019 - 2024. All rights reserved.