تحتاج إلى بعض المساعدة في إنشاء عرض مفهرس يحتوي على 2 COUNT_BIG
-
06-07-2019 - |
سؤال
حسنًا، أحاول إنشاء عرض مفهرس مقابل جدول بسيط يخزن نتائج ما يعتقده الناس أنه جيد/سيئ لمنشور ما.هذه هي نتائج التصويت على المشاركات بالإبهام/الإبهام.
إذن ها هي طاولتي المزيفة :-
HelpfulPostId INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
PostId INT NOT NULL,
IsHelpful BIT NOT NULL,
UserId INT NOT NULL
لذلك يمكن للمستخدم أن يكون له صوت واحد فقط لكل مشاركة.إنها إما 1 (مفيد) أو 0 (غير مفيد) <-- لست متأكدًا من طريقة أفضل للتعامل مع ذلك، إذا كانت هناك طريقة أفضل.
نعم.ما أحاول القيام به هو الحصول على طريقة عرض تبدو كما يلي.
HelpfulPostId INT Identity(1,1) ليس مفتاحًا أساسيًا فارغًا،
PostId INT NOT NULL,
IsHelpfulCount COUNT_BIG (WHERE IsHelpful = 1)
IsNotHelpfulCount COUNT_BIG (WHERE IsHelpful = 0)
وأخيرًا، سأحتاج إلى جعله قابلاً للتخطيط حتى أتمكن من إضافة فهرس على PK ثم فهرس على PostId.
ليس لدي أي فكرة عن SQL لتقديم العرض.أي اقتراحات؟
هتافات :)
المحلول
أفكار:
- لا يمكنك استخدام COUNT(*) في طريقة عرض مفهرسة
- لا يمكنك تجميع حقول البت
هناك المزيد القيود المفروضة على طرق العرض المفهرسة
CREATE VIEW dbo.Example
WITH SCHEMABINDING
AS
SELECT
PostId,
SUM(CAST(IsHelpful AS bigint)) AS IsHelpfulCount,
SUM(CAST(1-IsHelpful AS bigint)) AS IsNotHelpfulCount,
COUNT_BIG(*) AS Dummy --Used to satisfy requirement
FROM
dbo.bob
GROUP BY
PostId
GO
CREATE UNIQUE CLUSTERED INDEX IXC_Test ON dbo.Example (PostId)
GO
يحرر:تمت إزالة حقل الهوية، الذي تمت إضافته عن طريق الخطأ إلى السؤال/المنشور الأصلي.
تحرير 2 (غبن):لقد نسيت أن أي مجموع في طريقة عرض مفهرسة أيضًا يحتاج إلى COUNT_BIG(*).لذا، قم ببساطة بإضافة واحد كعمود وهمي.لقد اختبرت هذا.
إذا كان تعريف العرض يستخدم وظيفة إجمالية ، فيجب أن تتضمن قائمة التحديد أيضًا count_big (*).