2016-04-01 34 views
1

yeni veri eklerken bir tablondaki bir tablodan diğerine veri ekleme Şu anda T-SQL'i öğreniyorum ve sql ve veritabanı tasarımı öğrenmek için kullandığım bu tabloyu oluşturdum. Ben bu verileri normalleştirmek ve bu tür herhangi bir ürün olduğu yerde gereksiz 0 ortadan kaldırmak istiyoruzBaşka bir sütuna

 
ProductID  AmountOfTypeA AmountOfTypeB AmountOfTypeC some other atributes 
                   describing product.... 
---------  ------------- ------------- ------------- 
101   1    2    0 
102   0    1    3 
103   5    0    0 

etc... 

: Şu anda böyle bir şey görünüyor bir tablodaki veriler var. Sütunlarla yeni bir tablo hazırladım: 'ProductID', 'Type' ve 'Amount' ve iki tabloyu ProductID ile bağlamak için Foreign tuşunu kullanın. Şu anda INSERT INTO dbo.tProdTypes (ProductID, Amount) FROM dbo.tProducts kullanarak sütun sütununa gidiyorum ve sonra 'Tür' sütununu el ile dolduruyorum.

Ancak bir sorguda, özellikle de diğer tablodaki bazı verileri bir sütun ve ikinci sütun olarak bazı özel veriler olarak eklemek mümkün olduğunu merak ediyordum. Ayrıca sütuna göre sütun gitmeyi umursamıyorum, ancak tüm sütunları bir kerede eklemek için bir yol varsa harika olurdu.

cevap

2

Böyle bir şey işe yarar mı:

INSERT tProdTypes (ProductID, Amount, Type) 
SELECT ProductID, AmountOfTypeA, 'TypeA' 
FROM tProducts 
WHERE AmountOfTypeA > 0 
UNION 
SELECT ProductID, AmountOfTypeB, 'TypeB' 
FROM tProducts 
WHERE AmountOfTypeB > 0 
UNION 
SELECT ProductID, AmountOfTypeC, 'TypeC' 
FROM tProducts 
WHERE AmountOfTypeC > 0 
+0

'Sendikası'nın yapmak bu. Yapması daha zor olacağını düşündüm. Teşekkürler. – Pawel

1

Ayrıca UNPIVOT kullanabilirsiniz:

;WITH cte AS (
SELECT * 
FROM (VALUES 
(101, 1, 2, 0), 
(102, 0, 1, 3), 
(103, 5, 0, 0) 
) as t (ProductID, AmountOfTypeA, AmountOfTypeB, AmountOfTypeC) 
) 

SELECT ProductID, Amount, [Type] 
FROM 
    (SELECT ProductID, AmountOfTypeA AS A, AmountOfTypeB AS B, AmountOfTypeC AS C 
    FROM cte) p 
UNPIVOT 
    (Amount FOR [Type] IN 
     (A, B, C) 
)AS unpvt; 

Çıktı:

kullanıyorum hiç düşünmemiştim
ProductID Amount  Type 
----------- ----------- ----------- 
101   1   A 
101   2   B 
101   0   C 
102   0   A 
102   1   B 
102   3   C 
103   5   A 
103   0   B 
103   0   C 

(9 row(s) affected) 
+0

Cevabınız için teşekkürler, hala pivotları tam olarak anlamadım ve 'UNION'u kullanmanın oldukça basit bir yolu var. Ama kesinlikle bir deneyeceğim. Teşekkürler. – Pawel

İlgili konular