Корпус сервера SQL - PullRequest
       7

Корпус сервера SQL

0 голосов
/ 15 марта 2011

Я хочу выбирать из разных таблиц на основе параметра, называемого «тип».Могу ли я использовать «CASE» для выбора таблицы from?

Могу ли я использовать что-то подобное?

select 
a as abc
b as xyz
from ( CASE when @type = 1 then tblSales
            when @type = 2 then tblTransfer
       end
)

Ответы [ 4 ]

4 голосов
/ 15 марта 2011

Я бы, наверное, сделал что-то вроде:

SELECT a AS abc, b AS xyz FROM tblSales WHERE @type=1
UNION ALL
SELECT a AS abc, b AS xyz FROM tblTransfer WHERE @type=2
2 голосов
/ 15 марта 2011

Это то, что вы ищете?

select
    a as abc,
    b as xyz
from 
    tblSales
WHERE
    @type = 1
UNION
select
    a as abc,
    b as xyz
FROM 
    tblTransfer
WHERE
    @type = 2
1 голос
/ 15 марта 2011

Вы можете попробовать объединение, если хотите это сделать (пример ниже), или вы можете использовать простое выражение «если».

Вы не можете использовать там оператор case, потому что case возвращает единственное значение, а не таблицу (что и ожидает "from").

create table #tblsales
(
    a varchar(1),
    b varchar(1)
)

create table #tblTransfer
(
    a varchar(1),
    b varchar(1)
)

insert into #tblSales(a,b) values ('s','1')
insert into #tblSales(a,b) values ('s','2')

insert into #tblTransfer(a,b) values ('t','1')
insert into #tblTransfer(a,b) values ('t','2')

declare @type int
set @type=1

select a as abc, b as xyz
from
    (
    select a,b,thetype
    from
        (select a,b, 1 as thetype from #tblsales) sales
        union
        (select a,b, 2 as theType from #tblTransfer)
    ) joined
where theType=@type
1 голос
/ 15 марта 2011
Declare @Sql nvarchar(4000)
Declare @type   int
SET @type = 1

SET @Sql = ''

set @Sql = @Sql + '
    select * FROM '
IF @type = 1
BEGIN
    set @Sql = @Sql + '[tblSales]'
END
ELSE
BEGIN
    set @Sql = @Sql + 'tblTransfer'
END

print @sql
exec (@Sql)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...