質問する
178 次
3 に答える
0
このような複雑なクエリがある場合は、更新する行のみを生成する「単純な」選択を作成することから始めます。
また、更新されたテーブルの更新値とpkの両方を返す必要があります
次に、これを(内部で)更新するテーブルと結合し、更新の記憶を行って、次のように一致する行のみを更新するのは(比較的)簡単です。
WHERE tblTobeUpdated.pk = SimpleSelect.pk
お役に立てれば
于 2012-12-11T17:11:34.560 に答える
0
これを詳しく調べる時間はありませんが、少なくとも修正したいと思われます。
WHERE DelivaryFlight. FlightDt > DelivaryFlight. FlightDt
これは決して満たすことのできない条件です。
あなたはおそらく欲しい:
WHERE DF. FlightDt > DF2. FlightDt
更新が更新されるレコードを確認できるようにすることは、これらの複雑なクエリでも役立ちます。そのため、通常は次のようにします。
Update
Set …
--Select *
FROM TableAct AC
次に、更新を実行する代わりに、 select で始まる部分を強調表示して実行し、結果を確認します。選択するレコードを選択していることと、値が表示されることを確認するまで、更新をテストしません交換は正しいです。
于 2012-12-11T20:05:38.810 に答える
0
クエリを分解してみてください。今日書いたクエリです。各部分を個別にテストします
SELECT
Employee
, Reference
, Payroll
, [Hours] / 60
[Hours]
, [Days]
FROM
(
SELECT
Employee
, Reference
, Payroll
, SUM( Duration ) AS [Hours]
, AvailableID
FROM
(
SELECT
RequirerID
, Duration
, RTRIM( COALESCE(MA.MemberLastName, '')
+ ' ' + COALESCE(MA.MemberFirstName, '')
+ ' ' + COALESCE(MA.MemberInitial, '')) Employee
, COALESCE(MA.Detailref1, '') Reference
, COALESCE(MA.PayrollRef, '') Payroll
, Available.AvailableId
FROM
(
SELECT DISTINCT
RequirerID
, ShiftDate
, CAST(ShiftStart - ShiftEnd - ShiftBreak AS DECIMAL(19,2)) ShiftDuration
, Id RequirementRecordID
FROM
Requirements
WHERE
Requirements.ShiftDate BETWEEN @ParamStartDate
AND @ParamEndDate
AND RequirerID IN (SELECT ID FROM MemberDetails WHERE CompanyID = @ParamCompanyID)
)
R
INNER JOIN
ShiftConfirmed
INNER JOIN
Available
INNER JOIN
MemberDetails MA
ON Available.AvailableID = MA.ID
ON ShiftConfirmed.AvailableRecordID = Available.ID
ON R.RequirementRecordID = ShiftConfirmed.RequirementRecordID
WHERE
R.ShiftDate BETWEEN @ParamStartDate
AND @ParamEndDate
AND COALESCE(ShiftChecked, 0) BETWEEN 0 AND 1
)
ShiftDay
Group By
Employee
, Reference
, Payroll
, AvailableId
) Shifts
INNER JOIN
(
SELECT
COUNT( * ) AS [Days]
, AvailableID
FROM
(
SELECT DISTINCT
R.ShiftDate
, Available.AvailableId
FROM
(
SELECT DISTINCT
ShiftDate
, Id RequirementRecordID
FROM
Requirements
WHERE
Requirements.ShiftDate BETWEEN @ParamStartDate
AND @ParamEndDate
AND RequirerID IN (SELECT ID FROM MemberDetails WHERE CompanyID = @ParamCompanyID)
)
R
INNER JOIN
ShiftConfirmed
INNER JOIN
Available
INNER JOIN
MemberDetails MA
ON Available.AvailableID = MA.ID
ON ShiftConfirmed.AvailableRecordID = Available.ID
ON R.RequirementRecordID = ShiftConfirmed.RequirementRecordID
WHERE
R.ShiftDate BETWEEN @ParamStartDate
AND @ParamEndDate
AND COALESCE(ShiftChecked, 0) BETWEEN 0 AND 1
)
ShiftDay
Group By
AvailableId
) D
ON Shifts.AvailableID = D.AvailableID
WHERE [Hours] > 0
ORDER BY
Employee
于 2012-12-13T09:14:14.653 に答える