Ich habe zwei Tabellen mit einer ID-Spalte (die die Tabellen zusammenpasst) und verkettete Spalten, in denen die verketteten Werte in einer beliebigen Reihenfolge sind. Ich möchte vergleichen, um zu sehen, ob die beiden Spalten genau die gleichen Elemente enthalten (in beliebiger Reihenfolge) und die ID ausgeben, wenn sie nicht vorhanden sind.SQL Server: Vergleichen von verketteten Spalten für die Gleichheit von ungeordneten Mengen
Beispiel:
Tabelle 1
PersonID Products
1 Apple|Pear|Orange
2 Flour|Apple|Butter
3 Apple
4 Banana|Cashews
5 Juice|Crackers|Banana|Cashews
6 Cashews
Tabelle 2
PersonID Products
1 Orange|Apple|Pear
2 Flour|Apple|Butter
3 Apple|Banana
4 Banana
5 Crackers|Juice|Banana|Cashews
6 Pear|Crackers
ich alle personids erhalten möchte, wo Produkte nicht ein identischer Satz (beliebige Reihenfolge) zwischen Tabelle 1 und Tabelle 2. Also in diesem Fall ist das: Person 3 (zusätzliches Produkt), Person 4 (fehlendes Produkt) und Person 6 (verschiedene Produkte).
Meine aktuelle Abfrage erfasst fälschlicherweise Personen 1 und 5, weil sie Produkte anders sortiert haben.
Meine aktuelle Abfrage ist wie folgt:
select t1.personid, t1.products as t1products, t2.products as t2products
from table1 t1 (nolock)
inner join table2 t2 (nolock) on t1.personid = t2.personid
where t1.products != t2.products
ich die Daten auch in Form vorge Verkettung haben, mit mehreren Zeilen pro PersonID (eine für jedes Produkt und wieder getrennt in zwei Tabellen), wenn das ist hilfreicher - ich habe nicht herausgefunden, wie man sie in alphabetischer Reihenfolge verkettet, also würde eine Lösung für diesen Effekt auch dieses Problem lösen.
Edit (Klärung): Die unconcatenated Daten sieht wie folgt aus:
Tabelle 1
PersonID Product
1 Apple
1 Pear
1 Orange
2 Flour
2 Apple
2 Butter
3 Apple
usw.
Tabelle 2
PersonID Product
1 Orange
1 Apple
1 Pear
2 Flour
2 Apple
2 Butter
3 Apple
3 Banana
usw.
Ich verwendete STUFF, um sie nach PersonID zu verketten.
Wie viele Spalten von Produkten gibt es die Notwendigkeit alphabetisiert werden, wenn Sie diesen Weg gehen sind? Das wäre so einfach wie einige verschachtelte "CASE" -Anweisungen mit '>' oder '<' Operatoren, wenn es nur ein paar Spalten gibt. – ghg565
Die Struktur besteht aus mehreren Zeilen für Produkte, nicht aus Spalten (so wird Jobid in mehreren Zeilen wiederholt). Sie können irgendwo von 1 bis 300 gehen, am häufigsten etwa 5-10 Zeilen pro – user3051065