2013-02-22 14 views
5

LIVELLO Please help conversione query di Oracle Server equivalente SQL:SQL Server equivalente a Oracle CONNECT BY e pseudocolonna

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

L'uscita è i numeri da 1 a 10:

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

So che c'è metodi di gerarchia in SQL Server e built-in come GetLevel e altro ancora. Può essere usato per ottenere gli stessi risultati?

Per creare doppio tavolo, se necessario (non sono sicuro) - copiato da qui: 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 

specificamente alla ricerca di esempi che avrebbe lasciato l'uso smth. come LIVELLO nelle domande. Ad esempio: c'è una sola data di inizio nella tabella - 22/04/2013. Ma con LEVEL sono in grado di incrementarlo come segue:

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 

Grazie mille a tutti in anticipo.

+0

C'è un numero massimo di numeri che avete bisogno? – sgeddes

+0

@sgeddes - no, in Oracle potrebbe esserci un numero qualsiasi invece di 10 come nel mio esempio. Ho limitato il mio esempio a 10 per semplicità. Grazie. – Art

+0

@ Martin - Grazie. Questo ha aiutato. – Art

risposta

9

Un modo che ho fatto in passato sta interrogando spt_values in questo modo:

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

Tuttavia, non dispone di un elenco completo di numeri. Una soluzione alternativa potrebbe essere quella di creare una CTE ricorsiva come tale:

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- Grazie. Sto ancora cercando equiv. a LIVELLO pseudocolonna. Speravo anche negli esempi con i metodi della gerarchia. – Art

+0

@Art - Non esiste un oggetto equivalente esposto della colonna di livello (sebbene SQL Server tenga traccia di esso internamente per vedere se viene raggiunto il limite massimo di ricorsione) ma è banale aggiungere una colonna di livello come in [l'esempio qui ] (http://msdn.microsoft.com/en-us/library/ms186243 (v = sql.105) .aspx) –

+0

@ Martin - Grande esempio, grazie mille. – Art

Problemi correlati