抄録: 私は2つのテーブルを持っています.1つは株式のリターンで、もう1つはそれぞれの5分位のテーブルで、トップの5分の1と1の平均を計算したいので、私のループは機能しないので、さらに進んでいきます。(yyyy-mm-dd)形式の列のループを作成する方法は?
コードが使用:
DECLARE @CDate as date, @SQL as varchar (max)
SET @CDate = '2006-12-30' -- dates as string must be yyyy-mm-dd
WHILE @CDate < '2016-12-31'
BEGIN
SET @SQL = 'SELECT AVG(MR.[' & @CDATE & ']) From MOMENTUM_Quintile MQ Left Join MOMENTUM_Returns MR on MQ.Mnemonic = MR.Mnemonic WHERE MQ.[' & @CDATE & '] = 1'
SET @CDate = DATEADD(mm, 1, @CDate)
WHILE Month(@CDate) = Month(DATEADD(dd, 1, @CDate))
BEGIN
SET @CDate = DATEADD(dd, 1, @CDate)
END
END
エラーメッセージ:
Msg 402, Level 16, State 1, Line 14
The data types varchar and date are incompatible in the '&' operator.
したがって、これらの列を通してどのように可能性があり、私はループ、私が作成した関数を使用して見つけるのに良い洞察を探して
CREATE TABLE [dbo].[MOMENTUM_Money](
[MNEMONIC] [varchar](50) NULL,
[2006-12-30] [money] NULL,
[2007-01-30] [money] NULL,
[2007-02-28] [money] NULL,
[2007-03-30] [money] NULL,
[2007-04-30] [money] NULL,
[2007-05-30] [money] NULL,
[2007-06-30] [money] NULL
) ON [PRIMARY]
GO
INSERT INTO momentum_returns (MNEMONIC,[2006-12-30], [2007-01-30], [2007-02-28], [2007-03-30], [2007-04-30], [2007-05-30], [2007-06-30])
VALUES ('AAL', 510.1708, 489.0758, 494.8104, 557.2972, 555.6318, 606.8441, 613.0896),
VALUES ('ABF',-6.5341 -6.4193 -6.5301 -6.8388 -7.3335 -7.385 -7.0781),
VALUES ('ACB', 6.9713, 6.578, 6.559, 7.2885, 6.9103, 6.3598, 5.7575),
VALUES ('ABC', 1.4600, 1.5030, 1.5352, 1.5609, 1.5447, 1.5609, 1.7493);
:ここ
はあなたのためのコードを試すことのできる小さなサンプルテーブルです。ありがとうございます
を、 '&' '+'にを変更してみてください。 – DVT
同じメッセージを送信します.. –
なぜ列として日付がありますか?これらは、日付列を持つ行でなければなりません。デザインが非正規化されていると、クエリが大幅に難しくなります。 –