説明が難しく、SQL Serverが最善ではありませんが、ここでは何も行いません。テーブルに現在のレコードと次のレコードの間の列の合計
INSERT [dbo].[Quarterly] ([QuarterDate], [SomeText]) VALUES (CAST(0x00009CF100000000 AS DateTime), N'Blah')
INSERT [dbo].[Quarterly] ([QuarterDate], [SomeText]) VALUES (CAST(0x00009D4B00000000 AS DateTime), N'Fools')
INSERT [dbo].[Quarterly] ([QuarterDate], [SomeText]) VALUES (CAST(0x00009DA600000000 AS DateTime), N'Later')
INSERT [dbo].[Quarterly] ([QuarterDate], [SomeText]) VALUES (CAST(0x00009E0400000000 AS DateTime), N'Something')
INSERT [dbo].[Quarterly] ([QuarterDate], [SomeText]) VALUES (CAST(0x00009E5E00000000 AS DateTime), N'New year')
INSERT [dbo].[Quarterly] ([QuarterDate], [SomeText]) VALUES (CAST(0x00009EC300000000 AS DateTime), N'In april')
そして2010-01-01
から(を含む)までの期間を挿入2012-03-10
最後TmpDegreeDays
:
まず、いくつかのテーブルを作成する:
CREATE TABLE [dbo].[Quarterly](
[QuarterDate] [datetime] NOT NULL,
[SomeText] [nvarchar](50) NULL,
CONSTRAINT [PK_Quarterly] PRIMARY KEY CLUSTERED
(
[QuarterDate] ASC
)
GO
CREATE TABLE [dbo].[TmpDegreeDays](
[Date] [datetime] NOT NULL,
[Value] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_TmpDegreeDays] PRIMARY KEY CLUSTERED
(
[Date] ASC
)
GO
そしていくつかのデータを挿入する
私は計算したい現在のQuarterDate
とQuarterly
結果セットの次のレコードの間のQuarterly
テーブル内の各レコードの[値]のSUMをTmpDegreeDays
にします。
何かのように:
DECLARE @startDate datetime, @endDate datetime
SET @startDate = '2010-01-01'
SET @endDate = '2010-12-31'
SELECT q.QuarterDate, q.SomeText, CustomSum =
(SELECT SUM(CAST([Value] AS float))
FROM TmpDegreeDays
WHERE [date] >= q.QuarterDate AND *Current QuarterDate* < *Some query here to get next row QuarterDate*)
FROM Quarterly q
WHERE q.QuarterDate BETWEEN @startDate AND @endDate
最終的な出力の例私を探しています:
2010-01-01 Sum of [Value] between 2010-01-01 and 2010-03-31
2010-04-01 Sum of [Value] between 2010-04-01 and 2010-06-30
2010-07-01 Sum of [Value] between 2010-07-01 and 2010-09-31
2010-10-03 Sum of [Value] between 2010-10-03 and 2010-10-03
はこの理にかなっていますか?
まず、あなたはあなたのINSERTをとても複雑にしていますか? INSERT INTO [dbo]。[Quarterly]([QuarterDate]、[SomeText])VALUES( '20100101'、N'Blah ') 'などを使用しないでください。 **あなたの奇妙なキャスティングよりもずっと簡単です.....:度の値を持つテーブルを持っている場合 - ** WHY **は 'Value'カラムです 'VARCHAR(50)' ??それは 'DECIMAL(10,4)'やそれ以上のもののようなものではいけませんか? Varcharは完全にここでは意味がありません..... –
Marc - それは私のコードではありません。私を信じて、それはもっとうまくいくでしょう。 –
'SUM'は' VARCHAR'列の**仕事でもありません - あなたは間違いなくいくつかのものを変更する必要があります..... –