レポートに 2 つの列を表示する必要があります。その値は、次の同じ入力式を使用して決定されます。
SELECT
CASE WHEN id>10
THEN 'AAAA'
ELSE
'BBBB'
END as 'FirstColumn',
CASE WHEN id>10
THEN
'BBBB'
ELSE
'DDDD' END as 'SecondColumn'
入力式は同じなので、入力式を 2 回繰り返さずにこの式を作成できますか?
レポートに 2 つの列を表示する必要があります。その値は、次の同じ入力式を使用して決定されます。
SELECT
CASE WHEN id>10
THEN 'AAAA'
ELSE
'BBBB'
END as 'FirstColumn',
CASE WHEN id>10
THEN
'BBBB'
ELSE
'DDDD' END as 'SecondColumn'
入力式は同じなので、入力式を 2 回繰り返さずにこの式を作成できますか?
その代わりに洗練されたものが想定されている場合はid>10
、少し短くして読みやすくするために:
select
IIF(p.b=1, 'AAA', 'BBB') [Col1],
IIF(p.b=1, 'BBB', 'DDD') [Col2]
from
TableName t
outer apply (select cast(case when t.id>10 then 1 else NULL end as bit) as b) p
ただし、これは SqlServer 2012 でのみ使用できます。以前のバージョンでは、おそらく、独自の IIF のようなスカラー関数を作成する必要があります。
create function dbo.IIF (@b bit, @ifValue varchar(50), @elseValue varchar(50))
returns varchar(50)
as begin
return (select case when @b = 1 then @ifValue else @elseValue end)
end
GO
select
dbo.IIF(p.b, 'AAA', 'BBB') [Col1],
dbo.IIF(p.b, 'BBB', 'DDD') [Col2]
from
TableName t
outer apply (select cast(case when t.id>10 then 1 else NULL end as bit) as b) p
手間をかける価値がある場合は、この変換ロジックを実行するユーザー定義関数 (UDF) を作成できます。
CREATE FUNCTION dbo.fColTransform(@id Int)
RETURNS Varchar(20)
AS BEGIN
DECLARE @ret Varchar(20)
SET @ret =
CASE
WHEN @id IS NULL THEN 'Unknown'
WHEN @id > 10 THEN 'BBB'
ELSE 'DDD'
END
RETURN @ret
END
次に、SELECT で、次のように構造化できます。
SELECT dbo.fColTransform(id1) AS FirstColumn,
dbo.fColTransform(id2) AS SecondColumn
FROM MyTable
それを変数に格納し、それを使用Execute
して呼び出すことができます。
Declare @foo as nvarchar(max)
set @foo='MyTable'
execute ('Select * from ' + @foo)
欠点は、クエリ全体がすべて赤くなることです (現在は文字列であるため)。
このクエリを試してみてください。おそらく役に立つでしょう (関数を使用しない場合):
WITH temp AS (
SELECT
CASE WHEN x.ID > 10
THEN 'AAAA'
ELSE 'BBBB'
END as Col
FROM (
SELECT 1 AS ID
UNION
SELECT 11 AS ID
UNION
SELECT 13 AS ID
UNION
SELECT 9 AS ID
UNION
SELECT 7 AS ID
) x
)
SELECT temp.Col AS FirstColumn, temp.Col AS SecondColumn
FROM temp
基本的:
With name As (
/*yourquery with one CASE-COLUMN*/
)
SELECT name.COL AS COLUMN1, name.COL AS COLUMN2 FROM name
ここでこれを試すことができます