0

ビューにインデックスを配置しようとしていますが、エラーが発生する問題が発生し続けています

ビューの選択リストには、集計関数またはグループ化列の結果に関する式が含まれているためです。選択リストから集計関数またはグループ化列の結果の式を削除することを検討してください。

コード:

USE [DB]
GO

/****** Object:  View [dbo].[MonthlyView]    Script Date: 03/17/2014 15:19:10 ******/
SET ANSI_NULLS ON
GO

--Set the options to support indexed views.
SET NUMERIC_ROUNDABORT OFF;
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,
    QUOTED_IDENTIFIER, ANSI_NULLS ON;
GO


SET QUOTED_IDENTIFIER ON
GO

ALTER VIEW [dbo].[MonthlyView2]
WITH SCHEMABINDING 
AS
SELECT                
                      ISNULL(SUM(I.RSQty),0) AS RSQty,
                      ISNULL(SUM(I.COGQty),0) AS COGQty,
                      ISNULL(SUM(I.DSQty),0) AS DSQty, 
                      ISNULL(SUM(I.LossQty),0) AS LossQty,
                      ISNULL(SUM(I.AbuseQty),0) AS AbuseQty,
                      ISNULL(SUM(I.InventoryChgQty),0) AS InventoryChgQty,
                      ISNULL(SUM(I.RSRev),0) AS RSRev,
                      ISNULL(SUM(I.COGRev),0) AS COGRev,
                      ISNULL(SUM(I.DSRev),0) AS DSRev,
                      ISNULL(SUM(I.LossRev),0) AS LossRev,
                      ISNULL( SUM(I.AbuseRev),0) AS AbuseRev,
                      ISNULL(SUM(I.InventoryChgRev),0) AS InventoryChgRev, 
                      ISNULL(SUM(I.EnergyChg + I.EnvironChg + I.HandlingChg + I.OtherChg + I.Discount + I.StopMin),0) AS Surcharge,
                      COUNT_BIG(*) as cbig,
                      M.MonthId, PeriodEnd, id, Sku
FROM         dbo.ItemRev AS I INNER JOIN
                      dbo.Weeks AS w ON I.WeekId = w.WeekId INNER JOIN
                      dbo.Month AS M ON M.MonthId = w.MonthId
GROUP BY  M.MonthId, PeriodEnd, id, Sku


GO

CREATE UNIQUE CLUSTERED INDEX IX_vMonthly on [dbo].[MonthlyView2]
(
    [ID] asc,
    [PeriodEnd] asc,
    [MonthId] asc,
    [SKU] asc
)

go
4

2 に答える 2

1

私はこのエラーに遭遇し、それがうまく機能することを発見しました

sum(isnull(myfieldname, 0))

それ以外の

isnull(sum(myfieldname), 0)

これらの意味には微妙な違いがあることに注意してください。1 つ目は null 値を 0 として扱いますが、2 つ目はいずれかが null の場合にゼロの結果を返します。

于 2016-10-17T20:54:10.533 に答える
0

ドキュメントには、大量の制限がリストされています。あなたがしていることは許可されていません。

簡単な修正は、許可されていない操作を実行しないビューにインデックスを作成し、「スカラー計算」を適用する別のビュー (ISNULLコード内) にラップすることです。

于 2014-03-17T21:20:39.150 に答える