3
CREATE TABLE #tmpTableA
(
    [Id] [int] NOT NULL,
    RegionId INT,
    DistrictId INT,
    NurseryDays INT,
    TransplantDays INT     
 )

INSERT #tmpTableA ([Id], RegionId,DistrictId,NurseryDays,TransplantDays) VALUES (1,1,NULL,2,2) 
INSERT #tmpTableA ([Id], RegionId,DistrictId,NurseryDays,TransplantDays) VALUES (2,1,2,NULL,2) 

サンプルコードの出力は、

Id  RegionId    DistrictId     NurseryDays         TransplantDays
2     1            2               NULL              2
1     1            NULL             2                2

私の望む結果は、1.) RegionId と DistrictId が存在する場合は、この組み合わせの移植日を取得します。それ以外の場合は、RegionId と DistrictId(NULL) の移植日を取得します。

2.) RegionId と DistrictId が存在する場合は、この組み合わせの保育園の日を取得します。それ以外の場合は、RegionId と DistrictId (NULL) の保育園の日を取得します。

望ましい結果:

NurseryDays        TransplantDays
 2                      2

これは単一のクエリで可能ですか?

よろしくお願いいたします。 ファイサル・ナシル

4

2 に答える 2

0

結果の説明と実際の結果が一致しません。データからregionidおよびdistrictidの保育日が必要な場合、これはnullである必要があります。

結果を取得するには、示されているようにストアドプロシージャを作成する必要があります。

create PROCEDURE ProcGetDays 
    @regionid int
AS
BEGIN

    SET NOCOUNT ON;
declare @nurserydays int
declare @transplantdays int

select @transplantdays = transplantdays from tmpTableA where regionid=@regionid and districtid is not null
if @transplantdays is null
    select @transplantdays = transplantdays from tmpTableA where regionid=@regionid

select @nurserydays=nurserydays from tmpTableA where regionid=@regionid and districtid is not null
if @nurserydays is null
    select @nurserydays=nurserydays from tmpTableA where regionid=@regionid

select @nurserydays as nurserydays,@transplantdays as transplantdays


END
GO

一時テーブルを使用する必要がある場合は、ストアドプロシージャ内でこれを作成して、引き続き使用できるようにする必要があります。サンプルでは、​​永続テーブルを使用しました。

END GO

于 2013-02-03T20:27:44.290 に答える
0

RegionIdまず、特定の行と特定の行または NULLを取得するフィルターを使用しますDistrictId。次に、より具体的な行が他の行より前になるように行を並べ替え、一番上の行を選択します。

SQL では、次のようになります。

SELECT TOP 1
  NurseryDays,
  TransplantDays
FROM YourTable
WHERE RegionId = @RegionId
  AND (DistrictId = @DistrictId OR @DistrictId IS NULL)
ORDER BY
  CASE DistrictId
    WHEN @DistrictId THEN 0
    ELSE 1
  END
;
于 2013-02-03T21:46:11.520 に答える