sql - SSRS स्तर(पदानुक्रम)द्वारा सभी पंक्तियों को प्रदर्शित नहीं कर रहा है




reporting-services ssrs-2012 (2)

ठीक है, यह मुझे पागल कर रहा है ...

मेरे पास एक ऐसी रिपोर्ट है जो कई सुविधाओं के लिए विवरण वापस खींचती है। इन सुविधाओं को दूसरों से लटकाया जा सकता है, अपने दावे या दोनों में मौजूद हैं

क्वेरी के परिणाम के रूप में मेरे पास निम्न डेटा है:

Feature_ID   Parent_ID
24            
24          25
20            
26          12
12            
21          23
26          20
22            
24          23
23          26
24          27
27          28
24          22
29          20
23            
25            
27          29
22          26
28          12

जैसा कि आप देख सकते हैं, कुछ विशेषताओं पदानुक्रम में कई जगहों पर फिट हैं हालांकि, मुझे रिपोर्ट में वापस आ गया है:

मैं फ़ीचर_आईडी पर ग्रुपिंग कर रहा हूं, पुनरावर्ती मूल माता-पिता Parent_ID है I मैं क्या खो रहा हूँ?


Answers

अपने शब्दों और अप्रत्याशित आउटपुट के अनुसार ऐसा लगता है कि आप विशिष्ट स्तरों और विशेषताओं की सूची तलाश रहे हैं। उम्मीद है कि निम्नलिखित उपयोगी है यदि नहीं, तो शायद आप कुछ अतिरिक्त संदर्भ प्रदान करने के लिए यह समझ सकते हैं कि आप क्या चाहते हैं।

declare @table table (Feature_ID int, Parent_ID int);

insert @table values
(24,null),
(24,25),
(20,null),
(26,12),
(12,null),
(21,23),
(26,20),
(22,null),
(24,23),
(23,26),
(24,27),
(27,28),
(24,22),
(29,20),
(23,null),
(25,null),
(27,29),
(22,26),
(28,12);

select * from @table order by 1,2;
select * from @table order by 2,1;

with cte as (
        select  Feature_ID, Parent_ID, 0 [Level], CAST(Feature_ID as varchar(200)) [Path]
        from    @table
        where   Parent_ID is null

        union   all

        select  t.Feature_ID, t.Parent_ID, c.[Level] + 1, cast(c.[Path] + '|' + CAST(t.Feature_ID as varchar(200)) as varchar(200))
        from    @table t
        join    cte c
                on c.Feature_ID = t.Parent_ID
)
select  distinct [Level], Feature_ID
from    cte
order   by [Level], Feature_ID;

यह निम्न परिणाम देता है:

Level   Feature_ID
0   12
0   20
0   22
0   23
0   24
0   25
1   21
1   24
1   26
1   28
1   29
2   22
2   23
2   27
3   21
3   24

आवेदन स्तर से (दुर्भाग्य से)। मैं मानता हूं कि डुप्लिकेशंस को रोकने का उचित तरीका डेटाबेस स्तर पर एक अद्वितीय इंडेक्स के उपयोग के माध्यम से है, लेकिन SQL सर्वर 2005 में, एक इंडेक्स को केवल 900 बाइट्स होने की अनुमति है, और मेरा वर्कर (2048) फ़ील्ड उस पर उड़ाता है।

मुझे पता नहीं है कि यह कितना अच्छा प्रदर्शन करेगा, लेकिन मुझे लगता है कि आप इसे लागू करने के लिए एक ट्रिगर लिख सकते हैं, भले ही आप इसे सीधे इंडेक्स के साथ नहीं कर सके। कुछ इस तरह:

-- given a table stories(story_id int not null primary key, story varchar(max) not null)
CREATE TRIGGER prevent_plagiarism 
ON stories 
after INSERT, UPDATE 
AS 
    DECLARE @cnt AS INT 

    SELECT @cnt = Count(*) 
    FROM   stories 
           INNER JOIN inserted 
                   ON ( stories.story = inserted.story 
                        AND stories.story_id != inserted.story_id ) 

    IF @cnt > 0 
      BEGIN 
          RAISERROR('plagiarism detected',16,1) 

          ROLLBACK TRANSACTION 
      END 

इसके अलावा, वर्कर (2048) मेरे लिए फिश लगता है (जीवन में कुछ चीजें 2048 बाइट हैं, लेकिन यह बहुत असामान्य है); क्या यह वास्तव में वर्चर (अधिकतम) नहीं होना चाहिए?







sql reporting-services ssrs-2012