2017-07-24 1 views
1

Nach vielen Arbeit, ich habe diesen (richtigen) query:Alternative zu überqueren gilt (zusammen auf X in())

select count(distinct t1.code+t1.flname+t1.col1+t2.flname) 
from #t4 t1 cross apply (select flname from #t4 sq where sq.col1=t1.col1)t2 

Nach vielen mehr Arbeit, konnte ich ohne eine equivelant Abfrage erzeugen, unter Verwendung von Kreuz anwenden. Ist es möglich? Vielleicht mit WITH? Wie wäre es mit WITH nicht?

+0

Ihre „richtige“ Abfrage kann auch nicht richtig sein. Wenn Sie 4 Spalten miteinander verketten, können Sie kollidieren. –

+0

Aufgrund der Natur der Felder, wie ich sie kenne, ist das ziemlich unwahrscheinlich. –

Antwort

1

Eine einfache join sollten gleichwertig sein:

select count(distinct t1.code + t1.flname + t1.col1 + sq.flname) 
from #t4 t1 join 
    #t4 sq 
    on sq.col1 = t1.col1; 
+0

Was ich verbal machen möchte, ist: Für jeden Datensatz von # t4, geben Sie mir ein Cross-Produkt mit allen Flames, die eine Spalte mit diesem Datensatz teilen. Also sollte t1.col1 = t2.col2 nicht auf einem inneren Join verwendet werden, sondern als ein Mittel, um eine Reihe von Zeilen zurückzugeben, mit denen ein Kreuz verbunden werden soll. –