varsayalım SQL Server Aşağıdaki tabloda (2012) vardır:SQL Server - Verimli yolu verilerim bir haritalama/topaklanmaya oluşturmak için
MyTable:
Col1: Col2: Col3: Col4: Val1: ... Valn:
a b c d 123 1234
....
Ve map edecek bir eşleme tablosu oluşturmak için arıyorum Belirli bir etikete Col1
- Col4
spesifik değerleri için. aşağıdaki gibi Yani, örneğin, bu görünebilir: örneğin, ilk satır olarak okunabilir,
MyMaps:
Col1: Col2: Col3: Col4: Label:
a <null> <null> d Label1
<null> b <null> d Label2
: nerede Col1
= MyTable herhangi satıra etiketi 'Label1' ver 'a' ve Col4
= 'd'.
SELECT
MyMaps.Label
,MyTable.Val1
...
,MyTable.Valn
FROM
MyTable
INNER JOIN MyMaps
ON ISNULL(MyTable.Col1, '') = COALESCE(MyMaps.Col1, MyTable.Col1, '')
AND ISNULL(MyTable.Col2, '') = COALESCE(MyMaps.Col2, MyTable.Col2, '')
AND ISNULL(MyTable.Col3, '') = COALESCE(MyMaps.Col3, MyTable.Col3, '')
AND ISNULL(MyTable.Col4, '') = COALESCE(MyMaps.Col4, MyTable.Col4, '')
Ve çalışır, ancak bir varsa bu Bunu gerçekleştirmek için iyi bir yoldur, eğer merak ediyorum ya:
Yani, bu eşleme için izin edebilirsiniz oluşturduğum sorgu MyTable oldukça büyük bir tablo olduğundan, harita oluşturmanın daha iyi/daha verimli bir yolu.
Herhangi bir düşünce/öneri?
yapmadan katılabilirsiniz, MyMaps'ler içeriyorsa ne olur (null, b, c, null) Label3? Bir eşleşme ve bu yüzden Label1. Doğru etiketi nasıl seçersiniz? Ayrıca, birleştirme koşulunuza bağlı olarak, COALESCE ve ISNULL kullandığınızdan büyük bir tabloda iyi performans göstermez. – dfdsfdsfsdf
Bir sayfanın 'MyTable' tablosu için 2 harita bulunduğunda ne olur? –
@KMC & Siyavash, iyi nokta. Bunun nasıl yapılacağına dair bir fikrim yok ve verdiğim verilerden dolayı böyle olmayacağımı farz ediyorum. Bu tür bir eşleştirmeyi nasıl gerçekleştirecek konusunda hiçbir fikrim yok. –