2010-05-22 22 views
6

FROM yan tümcesi olmayan bir SELECT, bir tabloyu sorgulamadan birden çok sütun alır:Birden çok satırlı tableless seçime sahip olmak mümkün mü?

SELECT 17+23, REPLACE('bannanna', 'nn', 'n'), RAND(), CURRENT_TIMESTAMP; 

Tabloya başvurmadan birden çok satırla sonuçlanan bir sorguyu nasıl yazabiliriz? Temel olarak, SELECT'yi bir veri tanımı ifadesine dönüştürmek için kötüye kullanın. Sonuç, tek bir sütun veya birden çok sütuna sahip olabilir.

Bir DBMS tarafsız cevabı ile ilgileniyorum, ancak diğerleri (örneğin UNPIVOT'e dayanarak) açıktır. Bunu olabildiğince yapmanın birçok yolunu toplamak isterim. Bu sorunun arkasında teknik bir uygulama yoktur; Pratikten daha teorik.

cevap

12

bir UNION kullanın

+---+ 
| 1 | 
+---+ 
| 1 | 
| 2 | 
+---+ 

Kullanım UNION ALL benzersiz olmayan satırların kaybını önlemek için.

+0

. Ah, peki. – outis

13

RDBMS'niz tarafından destekleniyorsa, bunun için Table Value Constructors kullanabilirsiniz. İşte T-SQL en UNPIVOT sütunlara sıralar veri devrik olabilir

SELECT X.* 
FROM (VALUES (1, 3.07766, 6.31371, 12.7062, 63.65600), 
       (2, 1.88562, 2.91999, 4.30265, 9.92482), 
       (3, 1.63774, 2.35336, 3.18243, 5.84089)) AS X (A, B, C, D, E); 
1

Mr Celko bir örnek. Çoklu unpivotlar, her bir düzenlenmemiş sütunun Kartezyen ürününe eşdeğerdir.

SELECT N, S 
    FROM (SELECT 1 aa, 2 ab, 3 ac, 'a' ba, 'b' bb, 'c' bc) s 
    UNPIVOT (N for Num in (aa,ab,ac)) AS t 
    UNPIVOT (S for Str in (ba,bb,bc)) AS u 

Sonuç: Birinin BİRLİĞİ bomba düştü önce orada-cevap biraz daha almak için umduğu

 
N | S 
--+-- 
1 | a 
1 | b 
1 | c 
2 | a 
2 | b 
2 | c 
3 | a 
3 | b 
3 | c 

İlgili konular