2013-09-30 9 views
20

मैं एक मेज है कि कुछ इस तरह दिखता है:एसक्यूएल सर्वर - एक ही तालिका में डेटा से अद्यतन स्तंभ

SetId  ID  Premium 
2012  5   Y 
2012  6   Y 
2013  5   N 
2013  6   N 

मैं प्रीमियम मूल्यों जहां setid के बराबर होती है 2012

के साथ 2013 के रिकॉर्ड को अपडेट करना चाहते

तो क्वेरी के बाद यह इस तरह दिखेगा:

SetId  ID  Premium 
2012  5   Y 
2012  6   Y 
2013  5   Y 
2013  6   Y 

किसी भी मदद की बहुत सराहना

+0

'2013 records' - इस भाग को स्पष्ट करें। क्या यह आपके डीबी में कहीं संग्रहीत है? या यह 'SetId' कॉलम का एक और स्पष्टीकरण है? – Nogard

+0

@ डॉवसन: आपका अनुमानित आउटपुट क्या है, अगर "2012 प्रीमियम का पहला रिकॉर्ड 'एन' है? –

+0

मैं प्रीमियम कॉलम की प्रतिलिपि बनाना चाहता हूं जहां आईडी 2012 के साथ उन रिकॉर्ड्स के लिए उन रिकॉर्ड्स से समान है। – dawsonz

उत्तर

29

यह स्पष्ट नहीं है जो 2012 मूल्य से आपको अवगत करवाने जो 2013 मूल्य का उपयोग करना चाहते, मैं मान लिया है कि ID ही होना चाहिए।

टेबल वेरिएबल्स का उपयोग करके पूरा उदाहरण जो आप प्रबंधन स्टूडियो में स्वयं का परीक्षण कर सकते हैं।

DECLARE @Tbl TABLE (
    SetId INT, 
    Id INT, 
    Premium VARCHAR(1) 
) 

INSERT INTO @Tbl VALUES (2012, 5, 'Y') 
INSERT INTO @Tbl VALUES (2012, 6, 'Y') 
INSERT INTO @Tbl VALUES (2013, 5, 'N') 
INSERT INTO @Tbl VALUES (2013, 6, 'N') 

--Before Update 
SELECT * FROM @Tbl 

--Something like this is what you need 
UPDATE t 
SET t.Premium = t2.Premium 
FROM @Tbl t 
INNER JOIN @Tbl t2 ON t.Id = t2.Id 
WHERE t2.SetId = 2012 AND t.SetId = 2013 

--After Update  
SELECT * FROM @Tbl 
+1

धन्यवाद क्रिस उदाहरण के आसपास खेलने के लिए बहुत उपयोगी था। –

10
UPDATE t 
SET t.Premium = (SELECT TOP 1 t2.Premium 
       FROM dbo.TableName t2 
       WHERE t2.SetId = 2012) 
FROM dbo.TableName t 
WHERE t.SetId = 2013 

Demonstration

7

मुझे लगता है कि यह सही समाधान है:

UPDATE t 
SET t.Premium = (SELECT TOP 1 t2.Premium 
       FROM dbo.TableName t2 
       WHERE t2.SetId = 2012 AND t2.Id = t.ID) 
FROM dbo.TableName t 
WHERE t.SetId = 2013 
+1

बहुत अच्छा मुद्दा क्रिस मैंने अभी परीक्षण किया है और इसे महसूस किया है, धन्यवाद। – dawsonz

+0

ओह, टिप्पणी हटा दी। यह था कि आपको इस उत्तर और मेरे अपने बीच के सूक्ष्म अंतर को ध्यान में रखना चाहिए, यदि 'SetId = 2012' और उसी आईडी आईडी के साथ मिलान प्रविष्टि नहीं है तो यह' t.Premium' को ' न्यूल ', जो टेबल स्कीमा के आधार पर असफल हो सकता है और क्या कॉलम शून्य मानों को अनुमति देता है। –

2

हम स्वयं तालिका से तालिका अद्यतन कर सकते हैं, इस तरह:

update TABLE_A 
    set TABLE_A.Col1=B.Col2 
    from TABLE_A B 
संबंधित मुद्दे