Sql 选择带有一个查询的多行(但请更改)

Sql 选择带有一个查询的多行(但请更改),sql,sql-server,tsql,Sql,Sql Server,Tsql,如何通过更改下面的查询来获得此结果 foo 01 02 03 declare @a as int set @a = 1 select single.* from (select case when 0=0 then '0'+ case when @a = 1 then '1' when @a = 2 then '2' when @a = 3 then '3'

如何通过更改下面的查询来获得此结果

foo
01
02
03

    declare @a as int 
    set @a = 1

    select single.* from
    (select 
    case
    when 0=0 then '0'+
        case 
        when @a = 1 then '1'
        when @a = 2 then '2'
        when @a = 3 then '3'
        end 
    end
    as foo) single
    cross join
    (select 1 as bir union all select 2 union all select 3) multi
如您所见,我需要在循环中(在每个“when”语句中)先写“1”,然后写a=a+1

PS:我有一个大的查询,我需要每行写三次,但有一些更改。(我需要在输出-最后一列-下将最后两行从“A0”更改为“**”)


您可以创建一个包含一列的表变量,并在其中插入1、2、3,然后将其外部连接到数据,然后使用case语句

比如:

DECLARE @onetwothree table (
    num nvarchar(2)
)
INSERT into @onetwothree (num) VALUES ('01')
INSERT into @onetwothree (num) VALUES ('02')
INSERT into @onetwothree (num) VALUES ('03')

SELECT YourBigQuery.*, OneTwoThree.num  
FROM YourBigQuery, @onetwothree AS OneTwoThree
SourceTable
--------|---------|---------|--------|
 field1 |  filed2 |  filed3 | field4 |
--------|---------|---------|--------|
   TR13 |  BA20   | 2009-08 | A0     |
   TR14 |  BA21   | 2009-08 | A1     |
   TR15 |  BA22   | 2009-08 | A2     |
   TR16 |  BA23   | 2009-08 | A3     |
在案例陈述中:

DECLARE @onetwothree table (
    num tinyint
)
INSERT into @onetwothree (num) VALUES (1)
INSERT into @onetwothree (num) VALUES (2)
INSERT into @onetwothree (num) VALUES (3)

SELECT YourBigQuery.*, (
      CASE OneTwoThree.num 
        WHEN 1 THEN YourBigQuery.YourLastColumn 
        ELSE '**'
      END
    )  
FROM YourBigQuery, @onetwothree AS OneTwoThree

老实说,我不知道这个问题的目的是什么。唯一显而易见的是,大部分都是徒劳的

但是,如果我正确理解了您的问题,那么表中有一个或多个记录,您希望根据这些记录生成一个结果集,该结果集包含每个记录的三个副本,但每个副本都有轻微的修改。因此,如果您有类似以下内容:

DECLARE @onetwothree table (
    num nvarchar(2)
)
INSERT into @onetwothree (num) VALUES ('01')
INSERT into @onetwothree (num) VALUES ('02')
INSERT into @onetwothree (num) VALUES ('03')

SELECT YourBigQuery.*, OneTwoThree.num  
FROM YourBigQuery, @onetwothree AS OneTwoThree
SourceTable
--------|---------|---------|--------|
 field1 |  filed2 |  filed3 | field4 |
--------|---------|---------|--------|
   TR13 |  BA20   | 2009-08 | A0     |
   TR14 |  BA21   | 2009-08 | A1     |
   TR15 |  BA22   | 2009-08 | A2     |
   TR16 |  BA23   | 2009-08 | A3     |
你想得到这个:

   TR13 |  BA20   | 2009-08 | A0     |
   TR13 |  BA20   | 2009-08 | **     |
   TR13 |  BA20   | 2009-08 | **     |
   TR14 |  BA21   | 2009-08 | A1     |
   TR14 |  BA21   | 2009-08 | **     |
   TR14 |  BA21   | 2009-08 | **     |
   TR15 |  BA21   | 2009-08 | A2     |
   TR15 |  BA21   | 2009-08 | **     |
   TR15 |  BA21   | 2009-08 | **     |
   TR16 |  BA23   | 2009-08 | A3     |
   TR16 |  BA23   | 2009-08 | **     |
   TR16 |  BA23   | 2009-08 | **     |
然后您可以这样编写查询:

 select SourceTable.field1
        , SourceTable.field2
        , SourceTable.field3
        , case when multi.bir = 1 then SourceTable.field4 else '**' end
  from SourceTable
   cross join
   (select 1 as bir union all select 2 union all select 3) multi

米基德的回答几乎相同

    declare @a as int 
    set @a = 1

    select 
      case 
        when multi.bir <> 1 then '**' 
        else single.foo
      end        
    from
    (select 
    case
    when 0=0 then '0'+
            case 
            when @a = 1 then '1'
            when @a = 2 then '2'
            when @a = 3 then '3'
            end 
    end
    as foo) single
    cross join
    (select 1 as bir union all select 2 union all select 3) multi

我不确定我是否正确地遵循了您的逻辑,请查看我的答案并让我知道我是否只需要3行。在我的输出中,我需要将last to rows的最后一列更改为“**”。您的查询是什么?我仍然不明白你想做什么,或者困难到底在哪里1.最重要的例子是我试图回答你最初的问题。第二部分(我刚刚补充)更符合您的实际需要。