2013-02-22 10 views
5

एसक्यूएल सर्वर बराबर करने के लिए ओरेकल जिज्ञासा को परिवर्तित करने में मदद करें:एसक्यूएल सर्वर के बराबर है और स्तर pseudocolumn

SELECT (LEVEL+1-1) AS lvl 
    FROM dual 
CONNECT BY LEVEL <= 10 
/

उत्पादन संख्या है 1 से 10 के:

LVL 
---- 
1 
2 
3 
... 
10 

मुझे पता है एसक्यूएल सर्वर में पदानुक्रम विधियों और GetLevel और अधिक जैसे अंतर्निर्मित। क्या इसका उपयोग एक ही परिणाम प्राप्त करने के लिए किया जा सकता है?

दोहरी तालिका बनाने के लिए यदि आवश्यक हो तो (यकीन नहीं) - यहां से नकल: http://blog.sqlauthority.com/2010/07/20/sql-server-select-from-dual-dual-equivalent/

CREATE TABLE DUAL 
(
DUMMY VARCHAR(1) 
) 
GO 
INSERT INTO DUAL (DUMMY) 
VALUES ('X') 
GO 

विशेष रूप से है कि जाने हैं उपयोग ख़ाली उदाहरण के लिए देख रहा। प्रश्नों में स्तर की तरह। उदाहरण के लिए: तालिका में केवल एक प्रारंभ तिथि है - 4/22/2013। लेकिन स्तर के साथ मैं इसे निम्नानुसार बढ़ाने में सक्षम हूं:

SELECT start_date, start_date+LEVEL-1 AS start_date_btwn 
    FROM my_tab 
WHERE id = 1 
CONNECT BY LEVEL<=10 
/

START_DATE START_DATE_BTWN 
------------------------------ 
4/22/2013 4/22/2013 
4/22/2013 4/23/2013 
4/22/2013 4/24/2013 
4/22/2013 4/25/2013 
...... 
4/22/2013 4/30/2013 

सभी को पहले से बहुत बहुत धन्यवाद।

+0

वहाँ जो नंबर आप की जरूरत है की एक अधिकतम संख्या निर्धारित है? – sgeddes

+0

@sgeddes - नहीं, ओरेकल में मेरे उदाहरण में 10 की बजाय कोई संख्या हो सकती है। मैंने सादगी के लिए 10 में अपना उदाहरण सीमित कर दिया। धन्यवाद। – Art

+0

@ मार्टिन - धन्यवाद। इससे मदद मिली। – Art

उत्तर

9

एक तरह से मैंने पहले भी यह किया है इस तरह spt_values क्वेरी करने जाता है:

SELECT number 
FROM master..spt_values 
WHERE 
    type = 'P' 
    AND number <= 255 

हालांकि, यह संख्या की एक पूरी सूची नहीं है। एक वैकल्पिक विकल्प इस तरह की तरह एक पुनरावर्ती CTE बनाने के लिए होगा:

WITH CTE AS (
    SELECT 1 as Number 
    UNION ALL 
    SELECT Number+1 
    FROM CTE 
    WHERE Number < 100 
) 
SELECT * FROM CTE 

SQL Fiddle Demo

+0

@ sgeddes- धन्यवाद। अभी भी equiv के लिए देख रहे हैं। छद्म शुक्राणु को ले जाने के लिए। मैं पदानुक्रम विधियों के साथ उदाहरणों की उम्मीद कर रहा था। – Art

+0

@Art - स्तर कॉलम के हमारे सामने कोई समकक्ष नहीं है (हालांकि SQL सर्वर आंतरिक रूप से ट्रैक करता है यह देखने के लिए कि अधिकतम रिकर्सन सीमा तक पहुंच गई है या नहीं) लेकिन यहां एक उदाहरण कॉलम जोड़ने के लिए यह छोटा है [उदाहरण यहाँ ] (http://msdn.microsoft.com/en-us/library/ms186243 (v = sql.105) .aspx) –

+0

@ मार्टिन - शानदार उदाहरण, बहुत बहुत धन्यवाद। – Art

संबंधित मुद्दे