!これがあなたのSQLです。
SET IDENTITY_INSERT Billing OFF
INSERT INTO Billing
(
FolioID
, BillingCategoryID
, BillingDescription
, BillingAmount
, BillingItemQty
, BillingItemDate
)
SELECT
24
, 1
, 'Room'
, CASE
WHEN CAST(GETDATE() AS TIME) <= '12:00' THEN QuotedRate * Nights
WHEN CAST(GETDATE() AS TIME) >= '13:00' THEN (QuotedRate * Nights) + (QuotedRate * Nights * .50)
ELSE (QuotedRate * Nights) + (QuotedRate * Nights * .50)
END
, 1
, GETDATE()
FROM Folio
WHERE FolioID = 24
SQL Fiddleがダウンしているので、テーブルを作成してSQLをローカルに実行しました。下記参照。ここで
個々のSQLスクリプトがあります。あなたは、など、あなたのIDENTITYカラム
CREATE TABLE Billing (
FolioID INT NOT NULL,
BillingCategoryID INT NULL,
BillingDescription VARCHAR(100) NOT NULL,
BillingAmount DECIMAL(9,2) NULL,
BillingItemQty NUMERIC(5,0) NULL,
BillingItemDate DATETIME NULL
)
CREATE TABLE Folio
(
FolioID INT NOT NULL,
QuotedRate DECIMAL(6,2) NOT NULL,
Nights INT NOT NULL
)
INSERT INTO Folio(FolioID, QuotedRate, Nights)
VALUES (24, 100.00, 5)
INSERT INTO Billing (
FolioID
, BillingCategoryID
, BillingDescription
, BillingAmount
, BillingItemQty
, BillingItemDate
)
SELECT
24
, 1
, 'Room'
, CASE
WHEN CAST(GETDATE() AS TIME) <= '12:00' THEN QuotedRate * Nights
WHEN CAST(GETDATE() AS TIME) >= '13:00' THEN (QuotedRate * Nights) + (QuotedRate * Nights * .50)
ELSE (QuotedRate * Nights) + (QuotedRate * Nights * .50)
END
, 1
, GETDATE()
FROM Folio
WHERE FolioID = 24
SELECT * FROM Billing
のためにそれを修正したいかもしれないが、私はあなたのINSERT
文の値として見るものだから、私はFolioID = 24
を使用しました。しかし、このアプローチは任意のために使用することができますFolioID
次の条件は、1日の時間に基づいて正しい計算を行います。 「just in case」のデフォルト句も必要です。これは、下のELSE
部分です。
SELECT 'Total Lodging' =
CASE
WHEN CAST(GETDATE() AS TIME) <= '12:00' THEN QuotedRate * Nights
WHEN CAST(GETDATE() AS TIME) >= '13:00' THEN (QuotedRate * Nights) + ((QuotedRate * Nights) * .50)
ELSE (QuotedRate * Nights) + ((QuotedRate * Nights) * .50) -- Default rate
END
FROM Folio
私は以下を参照してください、私のCASE
文の作品を確実にするために、テーブルからSELECTが-INGのせずにSQL Serverの状態を使用していました。
'CASE WHEN'ステートメントを使用してください。しかし、私はあなたのビジネスレイヤ(.net)で "ロジック"作業を行い、データのセーブ/アップデートにのみ 'SQLクエリ 'を使用する方が良いと思います。 – Fabio
これは回答には直接関係しませんが、彼らが午後12時30分にチェックアウトすれば? –