मेरे पास दो टेबल हैं।

  1. छात्र तालिका

enter image description here

  1. संपत्ति तालिका

enter image description here

  1. परिणाम तालिका

enter image description here

मैं छात्र तालिका का मूल्य और संपत्ति तालिका के कॉलम की संपत्ति आईडी कैसे प्राप्त कर सकता हूं और परिणाम तालिका में विलय कर सकता हूं?

कोई भी सलाह सहायक होगी।

# 1 अपडेट करें:

मैंने ईसाई मोएन के सुझाव का उपयोग करने की कोशिश की, मुझे यही मिलता है।

enter image description here

0
Ranjith Varatharajan 26 पद 2017, 20:34

2 जवाब

सबसे बढ़िया उत्तर

आपको UNPIVOT की आवश्यकता है एक कॉलम में पंक्तियों के रूप में कॉलम (गुण नाम) प्राप्त करने के लिए पहले Student के कॉलम। फिर join संपत्ति के नाम के आधार पर Property तालिका के साथ:

WITH UnPivoted
AS
(
  SELECT ID, value,col
  FROM 
  (
    SELECT ID,
      CAST(Name AS NVARCHAR(50)) AS Name, 
      CAST(Class AS NVARCHAR(50)) AS Class,
      CAST(ENG AS NVARCHAR(50)) AS ENG,
      CAST(TAM AS NVARCHAR(50)) AS TAM,
      CAST(HIN AS NVARCHAR(50)) AS HIN,
      CAST(MAT AS NVARCHAR(50)) AS MAT,
      CAST(PHY AS NVARCHAR(50)) AS PHY
    FROM Student 
  ) AS s
  UNPIVOT
  (value FOR col IN 
        ([Name], [class], [ENG], [TAM], [HIN], [MAT], [PHY])
  )AS unpvt
)
SELECT 
  ROW_NUMBER() OVER(ORDER BY u.ID,PropertyID) AS ID,
  p.PropertyID,
  u.Value,
  u.ID AS StudID
FROM Property AS p
INNER JOIN UnPivoted AS u ON p.PropertyName = u.col;

पहले ID के लिए, मैंने इस क्रम आईडी को बनाने के लिए रैंकिंग फ़ंक्शन ROW_NUMBER() का उपयोग किया।


यह सटीक परिणाम देगा जो आप खोज रहे हैं।

परिणाम:

| ID | PropertyID |  Value | StudID |
|----|------------|--------|--------|
|  1 |          1 |   Jack |      1 |
|  2 |          2 |     10 |      1 |
|  3 |          3 |     89 |      1 |
|  4 |          4 |     88 |      1 |
|  5 |          5 |     45 |      1 |
|  6 |          6 |    100 |      1 |
|  7 |          7 |     98 |      1 |
|  8 |          1 |   Jill |      2 |
|  9 |          2 |     10 |      2 |
| 10 |          3 |     89 |      2 |
| 11 |          4 |     99 |      2 |
| 12 |          5 |    100 |      2 |
| 13 |          6 |     78 |      2 |
| 14 |          7 |     91 |      2 |
| 15 |          1 | Trevor |      3 |
| 16 |          2 |     12 |      3 |
| 17 |          3 |    100 |      3 |
| 18 |          4 |     50 |      3 |
| 19 |          5 |     49 |      3 |
| 20 |          6 |     94 |      3 |
| 21 |          7 |    100 |      3 |
| 22 |          1 |    Jim |      4 |
| 23 |          2 |      8 |      4 |
| 24 |          3 |    100 |      4 |
| 25 |          4 |     91 |      4 |
| 26 |          5 |     92 |      4 |
| 27 |          6 |    100 |      4 |
| 28 |          7 |    100 |      4 |
3
26 पद 2017, 21:14

अन्य विकल्प apply का उपयोग करना है यदि आप unpivot रास्ते पर नहीं जाना चाहते हैं

select row_number() over (order by (select 1)) ID, p.PropertyID [PropID], a.Value, a.StuID 
from Student s
cross apply
(
    values (s.ID, 'Name', s.Name),
           (s.ID, 'Class', cast(s.Class as varchar)),
           (s.ID, 'ENG', cast(s.ENG as varchar)),
           (s.ID, 'TAM', cast(s.TAM as varchar)),
           (s.ID, 'HIN', cast(s.HIN as varchar)),
           (s.ID, 'MAT', cast(s.MAT as varchar)),
           (s.ID, 'PHY', cast(s.PHY as varchar))
) as a(StuID, Property, Value)
join Property p on p.PropertyName = a.Property
0
Yogesh Sharma 27 पद 2017, 07:53