Tsql 如何完成与父项相同的属性列表';s

Tsql 如何完成与父项相同的属性列表';s,tsql,Tsql,我有一个包含州和县法规的法规表: RegID State County RegulationName Regulation 1 CA weight 10 pounds 1 CA distance 20 miles 2 CA Orange distance 22 miles 父母(州)有全州性的规定,

我有一个包含州和县法规的法规表:

    RegID   State   County  RegulationName Regulation   
    1       CA              weight         10 pounds    
    1       CA              distance       20 miles 
    2       CA      Orange  distance       22 miles
父母(州)有全州性的规定,例如体重和距离

儿童(县)可能会覆盖一些规定。在本例中,Orange county使用其自身的值22英里覆盖州法规“距离”

表中未列出奥兰治县的“重量”规定。因为这意味着Orange county使用父母的“体重”

如何始终显示县级所有法规的完整列表?返回未在县级覆盖的隐含州级法规。 例如:

    RegId   State   County  RegulationName Regulation
    1       CA              weight         10 pounds    
    1       CA              distance       20 miles
    2       CA      Orange  weight         10 pounds 
    2       CA      Orange  distance       22 miles

假设这是一个简单的情况,即县法规取代州法规,无论涉及的值如何:

declare @Regulations as Table ( RegulationId Int Identity, RegId Int, State VarChar(2),
  County VarChar(16), RegulationName VarChar(16), Regulation VarChar(16) );

insert into @Regulations ( RegId, State, County, RegulationName, Regulation ) values
  ( 1, 'CA', NULL, 'weight', '10 pounds' ),
  ( 1, 'CA', NULL, 'distance', '20 miles' ),
  ( 2, 'CA', 'Orange', 'distance', '22 miles' ),
  ( 3, 'NY', NULL, 'weight', '1 stone' ),
  ( 4, 'NY', 'NYC', 'weight', '16 grams' ),
  ( 5, 'ND', NULL, 'shoe size', '9E' );

select * from @Regulations;

-- Start with all of the explicitly stated regulations.
select RegId, State, County, RegulationName, Regulation, 'Explicit' as [Type]
  from @Regulations
union all
-- Then add all of the missing county level regulations.
select L.RegId, L.State, C.County, L.RegulationName, L.Regulation, 'Implicit'
  from @Regulations as L cross join
    ( select distinct County, State from @Regulations where County is not NULL ) as C left outer join
    @Regulations as R on R.State = L.State and R.County = C.County and R.RegulationName = L.RegulationName
  -- Where the regulation applies at the state level (L.County is NULL) and
  --   there is no matching county level row (R.County is NULL from the LEFT OUTER JOIN).
  where L.County is NULL and R.County is NULL and C.State = L.State
  order by State, County, RegulationName;

假设这是一个简单的情况,即县法规取代州法规,无论涉及的值如何:

declare @Regulations as Table ( RegulationId Int Identity, RegId Int, State VarChar(2),
  County VarChar(16), RegulationName VarChar(16), Regulation VarChar(16) );

insert into @Regulations ( RegId, State, County, RegulationName, Regulation ) values
  ( 1, 'CA', NULL, 'weight', '10 pounds' ),
  ( 1, 'CA', NULL, 'distance', '20 miles' ),
  ( 2, 'CA', 'Orange', 'distance', '22 miles' ),
  ( 3, 'NY', NULL, 'weight', '1 stone' ),
  ( 4, 'NY', 'NYC', 'weight', '16 grams' ),
  ( 5, 'ND', NULL, 'shoe size', '9E' );

select * from @Regulations;

-- Start with all of the explicitly stated regulations.
select RegId, State, County, RegulationName, Regulation, 'Explicit' as [Type]
  from @Regulations
union all
-- Then add all of the missing county level regulations.
select L.RegId, L.State, C.County, L.RegulationName, L.Regulation, 'Implicit'
  from @Regulations as L cross join
    ( select distinct County, State from @Regulations where County is not NULL ) as C left outer join
    @Regulations as R on R.State = L.State and R.County = C.County and R.RegulationName = L.RegulationName
  -- Where the regulation applies at the state level (L.County is NULL) and
  --   there is no matching county level row (R.County is NULL from the LEFT OUTER JOIN).
  where L.County is NULL and R.County is NULL and C.State = L.State
  order by State, County, RegulationName;

当一个值被一个更为地方性的法规取代时,获胜值总是最小值还是最大值,或者仅仅是更为地方性的?当一个值被一个更为地方性的法规取代时,获胜值总是最小值还是最大值,或者仅仅是更为地方性的?