2017-08-01 3 views
1

Stateに基づいて領域を見つける計算列を作成しようとしています。ここで計算カラムでCASE文を使用しようとしたときに何が問題になりましたか?

は、私が持っているものです。

CREATE FUNCTION fnDonorRegion (@Region VARCHAR(10)) 
RETURNS VARCHAR 
AS 
BEGIN 
    RETURN 
     CASE 
      WHEN DONOR.[State] IN ('Connecticut', 'Maine', 'Massachusetts', 'New Hampshire', 'Rhode Island', 'Vermont', 'New Jersey', 'New York', 'Pennsylvania') 
       THEN 'Northeast' 
      WHEN DONOR.[State] IN ('Illinois', 'Indiana', 'Michigan', 'Ohio', 'Wisconsin', 'Iowa', 'Kansas', 'Minnesota', 'Missouri', 'Nebraska', 'North Dakota', 'South Dakota') 
       THEN 'Midwest' 
      WHEN DONOR.[State] IN ('Delaware', 'Florida', 'Georgia', 'Maryland', 'North Carolina', 'South Carolina', 'Virginia', 'District of Columbia', 'West Virginia', 'Alabama', 'Kentucky', 'Mississippi', 'Tennessee', 'Arkansas', 'Louisiana', 'Oklahoma', 'Texas') 
       THEN 'South' 
      ELSE 'West' 
     END 
END 

ALTER TABLE tblDONOR 
ADD Region AS fnDonorRegion 

私はエラーを取得しておいてください。

Msg 4104, Level 16, State 1, Procedure fnDonorRegion, Line 12
The multi-part identifier "D.State" could not be bound.

すべてのヘルプははるかに高く評価されます!

+0

あなたの 'from'節はどこですか? – Sankar

+0

どこですか? @SankarRaj – cpoo

+0

あなたは上記のどのデータベースに対して挑戦していますか、DONORはテーブルですか? – deepakl

答えて

1

テーブルではなくパラメータを確認する必要があります。それで、パラメータが状態であると仮定しましょう。

CREATE FUNCTION fnDonorRegion (@state varchar(10)) 
RETURNS varchar 
AS 
BEGIN 
    RETURN 
    CASE 
    WHEN @state IN ('Connecticut', 'Maine', 'Massachusetts', 'New Hampshire', 'Rhode 
     Island', 'Vermont', 'New Jersey', 'New York', 'Pennsylvania') THEN 'Northeast' 
    WHEN @state IN ('Illinois', 'Indiana', 'Michigan', 'Ohio', 'Wisconsin', 
     'Iowa', 'Kansas', 'Minnesota', 'Missouri', 'Nebraska', 'North Dakota', 'South Dakota') THEN 'Midwest' 
    WHEN @state IN ('Delaware', 'Florida', 'Georgia', 'Maryland', 'North Carolina', 
     'South Carolina', 'Virginia', 'District of Columbia', 'West Virginia', 'Alabama', 'Kentucky', 
     'Mississippi', 'Tennessee', 'Arkansas', 'Louisiana', 'Oklahoma', 'Texas') THEN 'South' 
    ELSE 'West' 
    END 
END 

ALTER TABLE tblDONOR 
ADD Region AS fnDonorRegion([state]) -- assume your table has a column named state 
0

これを試してみてください:

CREATE FUNCTION dbo.fnDonorRegion 
    (@Region VARCHAR(100)) 
RETURNS VARCHAR(100) 
AS 
BEGIN 
    DECLARE @Result VARCHAR(100) 

    SELECT 
     @Result= CASE 
        WHEN DONOR.[State] IN (@Region) 
         THEN 'Northeast' 
        WHEN DONOR.[State] IN(@Region) 
         THEN 'Midwest'     
        ELSE 'West' 
       END 
    FROM tblDONOR AS DONOR 

    RETURN @Result 
END; 

SELECT dbo.fnDonorRegion('Connecticut') 
1

あなたはCASE声明の中で、あなたの入力変数を使用する必要があります。

Create FUNCTION fnDonorRegion (@Region varchar(50)) 
RETURNS varchar(10) 
AS 
BEGIN 
    RETURN 
    CASE 
    WHEN @Region IN ('Connecticut', 'Maine', 'Massachusetts', 'New Hampshire', 'Rhode 
     Island', 'Vermont', 'New Jersey', 'New York', 'Pennsylvania') THEN 'Northeast' 
    WHEN @Region IN ('Illinois', 'Indiana', 'Michigan', 'Ohio', 'Wisconsin', 
     'Iowa', 'Kansas', 'Minnesota', 'Missouri', 'Nebraska', 'North Dakota', 'South Dakota') THEN 'Midwest' 
    WHEN @Region IN ('Delaware', 'Florida', 'Georgia', 'Maryland', 'North Carolina', 
     'South Carolina', 'Virginia', 'District of Columbia', 'West Virginia', 'Alabama', 'Kentucky', 
     'Mississippi', 'Tennessee', 'Arkansas', 'Louisiana', 'Oklahoma', 'Texas') THEN 'South' 
    ELSE 'West' 
    ENd 
ENd 

select dbo.fnDonorRegion('Mississippi') 
関連する問題