この質問は、他の最近の2つの記事で私が言及した最初のcteをコード化するのと同じ努力の続きです。一言で言えば、私は以下のクエリのためのいくつかのコンパイラエラーを処理しています。 Subqueryが複数の値を返したというエラーが表示されます。サブクエリの後に=、!=、<、< =、>、> =、またはサブクエリが式として使用されているときには許可されません。しかし、私が下に出てきたことは、私の現在の能力に基づいて私に "合法"と思われる...どんな助けも素晴らしいだろう。要求されるようにところで、...Sql Server cteエラー "サブクエリが複数の値を返しました。"
WITH Symb AS
(
SELECT Symbol
FROM tblSymbolsMain
),
DatesNotNeeded AS
(
SELECT Date
FROM tblDailyPricingAndVol inner join Symb on
tblDailyPricingAndVol.Symbol = Symb.Symbol
),
WideDateRange AS
(
SELECT TradingDate
FROM tblTradingDays
WHERE (TradingDate >= dbo.NextAvailableDataDownloadDateTime()) AND (TradingDate <= dbo.LatestAvailableDataDownloadDateTime())
),
DatesNeeded AS
(
SELECT TradingDate
FROM WideDateRange wdr
WHERE NOT EXISTS (SELECT * FROM DatesNotNeeded d where d.Date = wdr.TradingDate)
)
SELECT Symb.Symbol, DatesNeeded.TradingDate
FROM Symb CROSS JOIN DatesNeeded
そして、私の機能を私はどちらかは、そのエラーを取得するか、私はこれを実行しようとすると、Visual Studio 2010はシャットダウンします
ALTER FUNCTION dbo.LatestAvailableDataDownloadDateTime()
RETURNS date
BEGIN
RETURN (SELECT DATEADD(hour, 18, MAX(TradingDate)) AS LatestTradingDateAvailForDL
FROM tblTradingDays
GROUP BY TradingDate
HAVING (DATEADD(hour, 18, MAX(TradingDate)) < GETDATE()))
END
ALTER FUNCTION dbo.NextAvailableDataDownloadDateTime()
RETURNS date
BEGIN
RETURN (SELECT DATEADD(hour, 18, MIN(TradingDate)) AS TrDate
FROM tblTradingDays
HAVING (DATEADD(hour, 18, MIN(TradingDate)) > dbo.LatestDataDownloadDate()))
END
:
そして、これを試してみてください? – Eric
@Eric Yup、ちょうど行った.. – StatsViaCsh
@StatsViaCash - 問題が見つかりました。あなたは、あなたが最大のものを見つけようとしている列でグループ分けしています。これは、 'dateadd(hour、18、tradingdate)
Eric