سؤال

أحاول الحصول على جميع القيم المميزة عبر 2 طاولات باستخدام اتحاد.

تتمثل الفكرة في الحصول على عدد من القيم الفريدة في عمود Columna دون تكرار حتى أتمكن من الحصول على ملخص لجميع الأعمدة التي تحتوي على كولنا فريد من نوعها.

هذا هو ما حاولت (SQL Server Express 2008)

select 
    count(Distinct ColumnA) 
from 
( 
    select Distinct ColumnA as ColumnA from tableX where x = y
    union
    select Distinct ColumnA as ColumnA from tableY where y=z
)
هل كانت مفيدة؟

المحلول

SELECT COUNT(distinct tmp.ColumnA) FROM ( (SELECT ColumnA FROM TableX WHERE x=y) 
UNION (SELECT ColumnA FROM TableY WHERE y=z) ) as tmp

لا يلزم التوفيق الإضافي على Tablex و Tabley؛ سوف يتم تجريدهم في جملة TMP.Columna. يجب أن يعلن طاولة مؤقتة القضاء على الغموض الذي قد منع استفسارك من التنفيذ.

نصائح أخرى

SELECT COUNT(*)
FROM
(
SELECT DISTINCT ColumnA From TableX WHERE x = y
UNION
SELECT DISTINCT ColumnA From TableY WHERE y = z
) t

باستخدام "الاتحاد" لن يعود التكرارات. إذا كنت تستخدم "UNION ELL"، فسوف تعود قيم كولومنا مكررة من كل جدول.

للحصول على القيم المميزة في Union Query، يمكنك تجربة هذا

Select distinct AUnion.Name,AUnion.Company from (SELECT Name,Company from table1 UNION SELECT Name,Company from table2)AUnion
SELECT DISTINCT Id, Name
FROM   TableA
UNION ALL
SELECT DISTINCT Id, Name
FROM   TableB
WHERE  TableB.Id NOT IN (SELECT Id FROM TableA)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top