0

3 つのレコードを持つ TableCodes と呼ばれる他のテーブルに基づく

Code
1508
1509
1510

そして、クエリiaテンポラルテーブルからこの結果が得られました....

CapacityDate    InstallerCode   WorkAreadID FoxtelCodeID    value 
2/8/12          BAW                  7          1508                  3 
3/8/12          BAW                  7          1508                  1
4/8/12          BAW                  7          1509                  1

値 = 0 の TableCodes に基づいて欠落している他のレコードを同じテーブルに挿入する必要があります

これ欲しい

CapacityDate    InstallerCode   WorkAreadID FoxtelCodeID    value 
2/8/12          BAW                  7          1508                  3 
2/8/12          BAW                  7          1509                  0 
2/8/12          BAW                  7          1510                  0 
3/8/12          BAW                  7          1508                  1
3/8/12          BAW                  7          1509                  0
3/8/12          BAW                  7          1510                  0
4/8/12          BAW                  7          1508                  1
4/8/12          BAW                  7          1509                  0
4/8/12          BAW                  7          1510                  0

次のコードを使用しています

Insert into #TmpAdjustmentTable (
    CapacityDate, InstallerID, InstallerCode, InstallerName,
    bThisIsAnAdjustment, sStatusOfCapacity, WorkAreadID, WORKAREA,
    CapacityState, FoxtelCodeID, SINTERNALLABELFORCAPACITY,
    SLABELFORCAPACITY, CapacityUnits, Capacity, MaxJobs, CommentsForDay
)
select
     ta.CapacityDate, ta.InstallerID, ta.InstallerCode, ta.InstallerName,
     1, ta.sStatusOfCapacity, ta.WorkAreadID, ta.WORKAREA,
     ta.CapacityState, FoxtelCodes.SYSID, FoxtelCodes.SINTERNALSHORTLABELFORCAPACITY,
     FoxtelCodes.SLABELFORCAPACITY, 0, 0, 0, ta.CommentsForDay
from #TmpAdjustmentTable ta
inner JOIN FoxtelCodes
On FoxtelCodes.SYSID <>  ta.FoxtelCodeID 
and FoxtelCodes.BCOLLECTTHISFORCAPACITY = 1

しかし、私は...

CapacityDate    InstallerCode   WorkAreadID FoxtelCodeID    value 
2/8/12          BAW                  7          1508                  3 
2/8/12          BAW                  7          1509                  0 
2/8/12          BAW                  7          1510                  0 
3/8/12          BAW                  7          1508                  1
3/8/12          BAW                  7          1508                  0
3/8/12          BAW                  7          1509                  0
3/8/12          BAW                  7          1509                  0
3/8/12          BAW                  7          1510                  0
3/8/12          BAW                  7          1510                  0
4/8/12          BAW                  7          1508                  1
4/8/12          BAW                  7          1508                  0
4/8/12          BAW                  7          1509                  0
4/8/12          BAW                  7          1509                 0
4/8/12          BAW                  7          1510                  0
4/8/12          BAW                  7          1510                  0
4

3 に答える 3

0

こんにちは、以下のクエリをチェックして、要求された形式で出力を取得してください。

-- ここでは、while ループを使用せずに出力を取得しようとしましたが、うまくいきませんでした。

Declare @min int,@max int
SELECT @min=MIN(idn),@max=MAX(idn) from Results
SELECT @min,@max
Declare @tbl_out table (CapacityDate datetime,InstallerCode varchar(100),WorkAreadID int,FoxtelCodeID int,value int)
While(@min<=@max)
begin
;With CTE(CapacityDate,InstallerCode,WorkAreadID,FoxtelCodeID,value) AS
(SELECT CapacityDate,InstallerCode,WorkAreadID,FoxtelCodeID,value from Results where idn = @min)

,CTE1(code,value) AS
(SELECT C.code,isnull(T.Value,0) FROM Codes C LEFT OUTER JOIN CTE T on C.code=T.FoxtelCodeID)
insert into @tbl_out
select r.CapacityDate,r.InstallerCode,r.WorkAreadID,c.code,c.value from CTE1 c,CTE r
SET @min+=1
End
select * from @tbl_out
select * from Results
于 2012-07-04T12:26:38.540 に答える
0

CapacityDate一時テーブルに既に存在する、InstallerCode、のすべての個別の組み合わせを取得し、WorkAreadIDそれらを のコードとクロス結合してTableCodesから、一時テーブルが同じ日付とコードで既に一致している行を除外します。SQL では、次のようになります。

INSERT INTO #Table (
  CapacityDate,
  InstallerCode,
  WorkAreadID,
  FoxtelCodeID,
  value
)
SELECT
  d.CapacityDate,
  d.InstallerCode,
  d.WorkAreadID,
  c.Code,
  0
FROM (
  SELECT DISTINCT
    CapacityDate,
    InstallerCode,
    WorkAreadID
  FROM #Table
) d
CROSS JOIN TableCodes c
LEFT JOIN #Table t ON d.CapacityDate = t.CapacityDate AND c.Code = t.FoxtelCodeID
WHERE t.FoxtelCodeID IS NULL
于 2012-07-04T16:01:27.363 に答える
0

ちょっとこれはwhileループのない最新のものです

Select CapacityDate,InstallerCode,WorkAreadID,code,0 value from Results join Codes
on FoxtelCodeID<>code
union all
Select CapacityDate,InstallerCode,WorkAreadID,FoxtelCodeID,value from Results 
order by CapacityDate, value desc
于 2012-07-04T13:03:34.673 に答える