عام جدول اظہارات کا استعمال کرتے ہوئے مکرر پروسیسنگ کے اندر جمع پروسیسنگ کرنا

جب صفحے کی تازہ کاری :
صفحہ تخلیق تاریخ :

نمونہ کوائف

خلاصہ کوائف کے ساتھ درج ذیل درجہ بندی کوائف اور جدولوں کے ساتھ جدول استعمال کریں:

مقدار درجہ بندی جدول

شناختی ( انٹ، پی کے) نام (نوارچر(50)) پیسہ (بگنٹ) پیرنٹ آئی ڈی (انٹ)
1 ایک 10000 صفر
2 B 5000 1
3 C 3000 2
11 K 20000 صفر
12 L 1000 11

نقطہ جدول

پوائنٹ آئی ڈی (انٹ) )
، پی کےرقم شناختی ڈی (انٹپوائنٹ (بیگنٹ)
1 1 100
2 1 50
3 2 40
4 3 10
5 3 60
6 3 80
7 11 20
8 12 50
9 12 40

عام جدول اظہار کا استعمال کیسے کریں

میں زیادہ تفصیل سے نہیں لکھوں گا کیونکہ بنیادی موضوع یہاں نہیں ہے، لیکن اس کا خلاصہ سادہ الفاظ میں بیان کرنے کے لئے، ایک مشترکہ جدول اظہار ایک منتخب اظہار کی طرح ہے جس کی آپ نے پیشگی وضاحت کی ہے اور پھر آپ ایک منتخب اظہار استعمال کرسکتے ہیں جس کی آپ نے بعد کے جدول حوالہ میں ایک ہی وضاحت کا متعدد تخلیق کیے بغیر وضاحت کی ہے۔ یہ منظر کے قریب ایک تصویر ہو سکتی ہے۔

اسے استعمال کرنے کا طریقہ یہ ہے:

-- 共通テーブル式で事前に select 内容を定義する
with [cte] as
(
  select *
  from [金額階層テーブル]
  where [Money] >= 5000
)
select * from [cte]
union all
select * from [cte]
;

نتیجہ

درجہ بندی اعداد و شمار کی نمائندگی

میرے خیال میں شاید یہ وہ نمونہ ہے جو عام میز اظہار کو اتنا مفید بناتا ہے۔ پہلے متعارف کرائے گئے ڈیٹا کے منتخب اظہار کو دیگر چیزوں جیسے خیالات اور جدول متغیرات کے متبادل کے طور پر استعمال کیا جاسکتا ہے، لہذا اس سے زیادہ فائدہ نہیں ہوتا۔

درجہ بندی نمائندگی عام جدول اظہارات میں زیادہ عام جدول اظہارات کو بلا کر حاصل کی جاسکتی ہے، جیسا کہ درج ذیل ایس کیو ایل میں ہے:

اس کا استعمال کرتے وقت محتاط رہنے کے نکات یہ ہیں کہ "منتخب کو یکجا کرنا جو نقطہ آغاز ہے اور منتخب جو درجہ بندی کے اعداد و شمار کو یونین سب کے ساتھ جوڑتا ہے" اور "تاروں کو ملاتے وقت سائز کو متحد کرنا"۔

-- 共通テーブル式で階層データをつなげる
with [cte] as
(
  select
    [ID]
   ,[Name]
   ,[ParentID]
   ,[Money] as [金額合計]
   ,1 as [レベル]
   ,cast([Name] as nvarchar(4000)) as [階層]
  from [金額階層テーブル]
  where [ParentID] is null

  union all

  select
    [子].[ID]
   ,[子].[Name]
   ,[子].[ParentID]
   ,[親].[金額合計] + [子].[Money] as [金額合計]
   ,[親].[レベル] + 1 as [レベル]
   ,[親].[階層] + N'⇒' + [子].[Name] as [階層]
  from [金額階層テーブル] [子]
  inner join [cte] [親]
    on [子].[ParentID] = [親].[ID]
)
select *
from [cte]
order by [ID]
;

نتیجہ

عام جدول اظہارات کی درجہ بندی عمل کاری کے اندر جمع کرنا (نقص واقع ہوا)

میں سمجھتا ہوں کہ ایک معاملہ ایسا بھی ہے جہاں آپ مشترکہ جدول اظہار کی درجہ بندی کی پروسیسنگ میں مجموعی قدر کا حساب لگانا چاہتے ہیں۔ یہاں، ہم شناختی رقم سے منسلک پوائنٹس کی کل تعداد کا حساب لگانے کی کوشش کر رہے ہیں۔

-- 共通テーブル式の階層処理内で集計を使用する (エラー)
with [cte] as
(
  select
    [ID]
   ,[Name]
   ,[ParentID]
   ,[Money] as [金額合計]
   ,(
      select sum([ポイント])
      from [ポイントテーブル]
      where [金額ID] = [ID]
    ) as [ポイント合計]
   ,1 as [レベル]
   ,cast([Name] as nvarchar(4000)) as [階層]
  from [金額階層テーブル]
  where [ParentID] is null

  union all

  select
    [子].[ID]
   ,[子].[Name]
   ,[子].[ParentID]
   ,[親].[金額合計] + [子].[Money] as [金額合計]
   ,[親].[ポイント合計] + (
                            select sum([ポイント])
                            from [ポイントテーブル]
                            where [金額ID] = [子].[ID]
                          ) as [ポイント合計]
   ,[親].[レベル] + 1 as [レベル]
   ,[親].[階層] + N'⇒' + [子].[Name] as [階層]
  from [金額階層テーブル] [子]
  inner join [cte] [親]
    on [子].[ParentID] = [親].[ID]
)
select *
from [cte]
order by [ID]
;

لیکن جب میں اسے چلاتا ہوں تو مجھے مندرجہ ذیل غلطی ملتی ہے:

GROUP BY、HAVING、または集計関数は、再帰共通テーブル式 'cte' の再帰部分では許可されません。

ایسا لگتا ہے کہ گروپنگ سے متعلق پروسیسنگ کو ایک مکرر مشترکہ جدول اظہار میں ڈالنا ممکن نہیں ہے۔

مشترکہ جدول اظہارات کی درجہ بندی پروسیسنگ میں جمع (عام طرز عمل)

اگرچہ مکرر مشترکہ جدول اظہار میں جمع کے عمل کو بیان کرنا ممکن نہیں ہے، لیکن جمع پروسیسنگ حصے کو ایک مشترکہ جدول اظہار کے طور پر تعریف کرکے اس پر عمل درآمد کیا جاسکتا ہے۔

متعدد مشترکہ جدول اظہارات لکھنے کے لیے عام جدول کے اظہارات کو کوما کے ساتھ الگ کریں۔

-- 共通テーブル式の階層処理内で集計を使用する (正常)
with [ポイント合計CTE] as
(
  select
    [金額ID]
   ,sum([ポイント]) as [ポイント合計]
  from [ポイントテーブル]
  group by [金額ID]
)
,[cte] as
(
  select
    [ID]
   ,[Name]
   ,[ParentID]
   ,[Money] as [金額合計]
   ,(
      select [ポイント合計]
      from [ポイント合計CTE]
      where [金額ID] = [ID]
    ) as [ポイント合計]
   ,1 as [レベル]
   ,cast([Name] as nvarchar(4000)) as [階層]
  from [金額階層テーブル]
  where [ParentID] is null

  union all

  select
    [子].[ID]
   ,[子].[Name]
   ,[子].[ParentID]
   ,[親].[金額合計] + [子].[Money] as [金額合計]
   ,[親].[ポイント合計] + (
                            select [ポイント合計]
                            from [ポイント合計CTE]
                            where [金額ID] = [子].[ID]
                          ) as [ポイント合計]
   ,[親].[レベル] + 1 as [レベル]
   ,[親].[階層] + N'⇒' + [子].[Name] as [階層]
  from [金額階層テーブル] [子]
  inner join [cte] [親]
    on [子].[ParentID] = [親].[ID]
)
select *
from [cte]
order by [ID]
;

نتیجہ