मैंने पिछले कुछ दिनों में इस पर काम किया है और सर्कल में घूम रहा हूं। stackoverflow questionएसक्यूएल सिंटेक्स एकाधिक टेबलों को पिवोट
अब मैं अपने डेटा किसी एकल 400 स्तंभ तालिका से एक और अधिक प्रबंधनीय डेटाबेस संरचना करने के लिए दामिर Sudarevic के लिए कई धन्यवाद के साथ चले गए हैं:
मेरे सवाल का जवाब मैं इस पोस्ट में स्वीकार किए जाते हैं आसपास आधारित है।
मेरे डेटाबेस इस तरह दिखता है:
CREATE TABLE JobFiles (
JobID UNIQUEIDENTIFIER PRIMARY KEY,
MachineID UNIQUEIDENTIFIER REFERENCES Machines(MachineID),
[Desc] NVARCHAR(MAX),
Name NVARCHAR(255),
JobOpen BIT,
[CreateDate] DATETIME NOT NULL DEFAULT GETDATE(),
[ModifyDate] DATETIME NOT NULL DEFAULT GETDATE(),
[CreatedByUser] NVARCHAR(64) DEFAULT '',
[ModifiedByUser] NVARCHAR(64) DEFAULT '')
GO
CREATE TABLE JobParamType (
ParamTypeID UNIQUEIDENTIFIER PRIMARY KEY,
Name NVARCHAR(255),
[Desc] NVARCHAR(MAX),
IsTrait NVARCHAR)
GO
CREATE TABLE JobParamGroup (
ParamGroupID UNIQUEIDENTIFIER PRIMARY KEY,
Name NVARCHAR(255),
[Desc] NVARCHAR(MAX))
GO
CREATE TABLE JobParams (
ParamID UNIQUEIDENTIFIER PRIMARY KEY,
ParamTypeID UNIQUEIDENTIFIER REFERENCES JobParamType(ParamTypeID),
ParamGroupID UNIQUEIDENTIFIER REFERENCES JobParamGroup(ParamGroupID),
JobFileID UNIQUEIDENTIFIER REFERENCES JobFiles(JobID),
IsEnabled BIT)
GO
-- Text based property
CREATE TABLE JobTrait (
ParamID UNIQUEIDENTIFIER PRIMARY KEY REFERENCES JobParams(ParamID),
Value NVARCHAR(MAX))
GO
-- Numeric based property
CREATE TABLE JobMeasurement (
ParamID UNIQUEIDENTIFIER PRIMARY KEY REFERENCES JobParams(ParamID),
Value FLOAT,
Format NVARCHAR(20),
Unit NVARCHAR(MAX))
GO
हालांकि, अपने आवेदन के एक विशेष समारोह के लिए मैं एक JobMeasurement.Value या JobTrait वाले कॉलम के रूप में हर JobParamType.Name पंक्ति सूची की जरूरत है। प्रत्येक JobFiles.Name के लिए इसके डेटा के रूप में मूल्य।
जॉबप्रैम टाइप। आईएसट्रेट का उपयोग यह निर्धारित करने के लिए किया जाता है कि कोई मान मापन या विशेषता है या नहीं।
यानी
JobName | ParamName1 | ParamName2 | ParamName3 ... | ParamName400
"MyJob" MesurementValue TraitValue MesurementValue ... TraitValue
"TestJob" MesurementValue TraitValue MesurementValue ... TraitValue
"Job2" MesurementValue TraitValue MesurementValue ... TraitValue
etc
मैं पिवट तालिकाओं के साथ खेल रहे हैं और उदाहरण देख रही है और उन्हें का पालन करके JobParamType तालिका में कॉलम पाने में कामयाब रहे है लेकिन अब यह काफी जटिल हो रही है क्योंकि मेरे डेटा के बीच विभाजित है कई टेबल और यह मेरे सिर को चोट लगाना शुरू कर रहा है !!!
DECLARE @cols NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT TOP 10 PERCENT
'],[' + tParams.Name
FROM dbo.JobParamType AS tParams
ORDER BY '],[' + tParams.Name
FOR XML PATH('')
), 1, 2, '') + ']'
print @cols
मुझे उम्मीद है कि कोई मुझे पिवोटिंग और डेटा को एकाधिक तालिकाओं से प्राप्त करने में मदद कर सकता है।
मुझे उम्मीद है कि यह समझ में आता है और मैं आपकी मदद और चर्चाओं की प्रतीक्षा करता हूं।
उन्नत में धन्यवाद।
धन्यवाद ... अपना समय और प्रयासों की बहुत सराहना कर रहे हैं। पहले से कहीं अधिक जटिल बिट करें हालांकि यह कार्य आज आपके उदाहरण के माध्यम से निकल जाएगा और इसे चरणों में तोड़ देगा। – Belliez
दमीर, आपका प्रतिभा, धन्यवाद। यह पूरी तरह से काम करता है। बस एक आखिरी सवाल। मैं इस आदेश को आपके ऊपर कैसे चलाऊंगा। चरण 5 किसी तालिका में आदेश (एसक्यूएल प्रबंधन स्टूडियो के माध्यम से) प्रदर्शित "@qw से TXT का चयन करें" और मैं कॉपी करें और एक नई क्वेरी में पेस्ट करने के लिए है। फिर, धन्यवाद – Belliez
विचार करने के लिए "पैकेज" एक दृश्य, एक प्रक्रिया या एक चर में अंतिम क्वेरी है - कितनी बार मानकों की अपनी सूची को बदल सकता है पर निर्भर करता है। यदि उन 400 पैरामीटर साल में कुछ बार बदलते हैं, तो दृश्य का उपयोग करें और मैन्युअल रूप से परिवर्तन बनाएं। यदि वे प्रतिदिन बदलते हैं, तो इसे एक चर में रखें और गतिशील एसक्यूएल के रूप में निष्पादित करें - चरण 3 और 4 स्वचालित करें। –