समेकित खाता हैंडलिंग सेट करने के लिए, मैं उन खातों को जानना चाहता हूं जो में मालिकों का "बिल्कुल वही" सेट है।रिकॉर्ड्स के अन्य समूहों से मेल खाने वाले रिकॉर्ड के समूह (रिलेशनल डिवीजन?)
मुझे लगता है कि यह मालिकों को गतिशील एसक्यूएल के साथ पिटोट करने के लिए काम कर सकता है, फिर रैंकिंग फ़ंक्शंस का उपयोग करें, लेकिन मैं उस दृष्टिकोण को आगे नहीं लेना चाहता; मुझे पर कोई ऊपरी सीमा नहीं है कि दिए गए खाते से कितने नाम जुड़े जा सकते हैं, इसलिए मैं गतिशील एसक्यूएल से बचना चाहता हूं।
मेरे डेटा (भी इस http://www.sqlfiddle.com/#!3/1d36e पर है)
CREATE TABLE allacctRels
(account INT NOT NULL,
module CHAR(3) NOT NULL,
custCode CHAR(20) NOT NULL)
INSERT INTO allacctrels
(account, module, custCode)
VALUES
(1, 'DDA', 'Wilkie, Walker'),
(1, 'DDA', 'Houzemeal, Juvy'),
(2, 'CDS', 'Chase, Billy'),
(2, 'CDS', 'Norman, Storm'),
(3, 'CDS', 'Chase, Billy'),
(3, 'CDS', 'Norman, Storm'),
(7, 'CDS', 'Perkins, Tony'),
(15, 'SVG', 'Wilkie, Walker'), --typo in name before mwigdahl's response
(16, 'SVG', 'Wilkie, Walker'), -- corrected typo here too
(606, 'DDA', 'Norman, Storm'),
(606, 'DDA', 'Chase, Billy'),-- corrected 2nd typo found
(4, 'LNS', 'Wilkie, Walker'),
(4, 'LNS', 'Houzemeal, Juvy'),
(44, 'DDA', 'Perkins, Tony'),
(222, 'DDA', 'Wilkie, Walker'),
(222, 'DDA', 'Houzemeal, Juvy'),
(17, 'SVG', 'Wilkie, Walker'), -- added these three rows in edit, SVG 17 doesn't match any dda
(17, 'SVG', 'Welch, Raquel'),
(17, 'SVG', 'Houzemeal, Juvy')
मैं पता लगाना चाहते हैं, प्रत्येक मॉड्यूल-खाता, क्या सबसे कम डीडीए खाता है कि ठीक उसी मालिकों इसके साथ जुड़े है के लिए।
नमूना डेटा में, मैं इन परिणामों को चाहता हूं, तीसरा कॉलम निम्नतम डीडीए खाता है जिसमें एक ही मालिक हैं। में प्रत्येक पंक्ति के प्रति एक पंक्ति "DISTINCT मॉड्यूल का चयन करें, allAcctRels से खाता")
1, DDA, 1
2, CDS, 606
3, CDS, 606
15, SVG, NULL
16, SVG, NULL
606, DDA, 606
4, LNS, 1
7, CDS, 44
44, DDA, 44
222, DDA, 1
17, SVG, NULL -- added to original post.
एसवीजी 15 और 16 के डीडीए से मेल नहीं खाते - परिणाम thereâ फिर से मॉड्यूल/खाता कॉम्बो के रूप में पंक्तियों की संख्या समान होना चाहिए खाता, इसलिए इससे कोई फर्क नहीं पड़ता कि वे एक दूसरे से मेल खाते हैं, खाते को समेकित करने के लिए उन्हें न्यूल मिलता है। संपादित करें: एसवीजी 17 कुछ भी मेल नहीं खाता है, भले ही एक डीडीए एक्ट है जिसमें एसवीजी 17 में अपने सभी धारक हैं, एसवीजी 17 में धारकों का संयोजन किसी भी डीडीए एक्ट के लिए नहीं होता है। प्रत्येक डीडीए खाता स्वयं से मेल खाता है, जब तक कि डीडीए खाते एक ही मालिक के साथ नहीं है और कम डीडीए मौजूद है (जैसा कि डीडीए 222 के मामले में है)।
मैं देख सकता हूं कि एक सामान्य दृष्टिकोण प्रत्येक खाते को पिटोट करना है, समूह पिवोटेड टेबल, और row_number का उपयोग करें। प्रत्येक खाते से जुड़े धारकों की असंबद्ध संख्या को देखते हुए, मुझे लगता है कि पिवोटिंग डायनामिक एसक्यूएल लेगा जो मैं इससे बचूंगा।
ऐसा लगता है कि यह एक "रिलेशनशिप डिवीजन" समस्या है, संबंधपरक विभाजन शायद क्रॉस आवेदन द्वारा "खिलाया" जा रहा है। मैंने को एक फ़ंक्शन लिखने की कोशिश की जो खाताधारकों की एक तालिका से संबंधित एक विशिष्ट खाते के साथ ले लेती है और नीचे दिखाए गए के साथ सबसे कम डीडीए खाता ढूंढती है, यह विचार यह देखने के लिए होता है कि दिए गए में सभी लोगों की संख्या खाता उन लोगों की संख्या के समान होता है जब वह खाता किसी दिए गए डीडीए खाते में शामिल हो जाता है, लेकिन मैं यह नहीं समझ सकता कि फ़ंक्शन में खाता संख्याओं को "फ़ीड" कैसे करें।
-- this is what I tried but I'm not sure it the logic would work
-- and I can't figure out how to pass the account holders for each
-- account in. This is a bit changed from the function I wrote, some
-- extraneous fields removed and cryptic column names changed. So it
-- probably won't run as is.
-- to support a parameter type to a tape
-- CREATE type VisionCustomer as Table
-- (customer varchar(30))
CREATE FUNCTION consolidatable
(@custList dbo.VisionCustomer READONLY)
RETURNS char(10)
AS
BEGIN
DECLARE @retval Varchar(10)
DECLARE @howmany int
select @howmany=Count(*) FROM @custlist;
SELECT @retval = min (acct) FROM allAcctRels
JOIN @custlist
On VendorCustNo = Customer
WHERE acctType = 'DDA'
GROUP BY acct
HAVING (count(*) = @howmany)
and
COUNT(*) = (select Count(*) FROM allAcctRels X
WHERE X.acctType = 'DDA'
AND X.account = AllAcctRels.account) ;
RETURN @retval
END;
ध्यान दें कि "चेस, बिली" 606 डीडीए पंक्ति में resultset के साथ हंसी नहीं है कि आप कहते हैं कि तुम वापस चाहते हैं ; मुझे लगता है कि आप इसे "चेस, बिली" होना चाहते हैं, है ना? – mwigdahl
हां, यह सही है, इसके बारे में खेद है, और धन्यवाद, मैं अब –