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 存在,则获取此组合的 Nursery days,否则获取 RegionId 和 DistrictId (NULL) 的 Nursery days。
期望的结果:
NurseryDays TransplantDays
2 2
这在单个查询中可能吗?
感谢和问候, 费萨尔·纳西尔
最佳答案
您对结果的描述与实际结果不符。如果您需要从您的数据中获取 regionid 和 districtid 的育儿日,这应该为空。
您将需要如图所示创建存储过程以获得结果。
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
如果您需要使用临时表,您需要在存储过程中创建它以使其仍然可用。在示例中,我使用了一个永久表。
结束 开始
关于sql-server - 需要帮助编写复杂的 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676344/