2016-08-11 4 views
1

Ich arbeite in Microsoft SQL und ich habe eine Tabelle, wo die Spaltennamen wie 'INT001', 'INT002' den ganzen Weg zu 'INT300' sind, aber die Spalten nicht in der bestimmten Reihenfolge als die oben genannten Namen angezeigt.sql Auswahl Spalten basierend auf Name Typ

Ich möchte nur Spalten aus 'INT001' to 'INT096', d. H. 97 Spalten aus 300 Spalten und die Spalten in zufälliger Reihenfolge in der Tabelle auftreten.

Ich habe nicht einmal eine Ahnung, wo ich anfangen soll.

Edit: Ich möchte nicht die 97 Spaltennamen eingeben, wenn sie bereits ein Muster haben, das ich verwenden kann, wenn möglich.

+0

Was für 'wählen INT001 auf gehen falsch, INT002, INT003, ... INT096 aus Tisch'? – vercelli

Antwort

0

Es gibt keine Möglichkeit, dies in einer Abfrage zu tun ... Was Sie tun können, ist dynamisch die Abfrage generieren;

Sie können dies auf verschiedene Arten erzeugen ... so ähnlich (nur Zahlen verwenden, um die Spaltennamen zu erstellen);

DECLARE @QueryString as varchar(max); 

SELECT @QueryString = 'SELECT '; 

SELECT 
    @QueryString = COALESCE(@QueryString + '[INT' + TheNumber + '],', '') 
FROM 
    (SELECT DISTINCT RIGHT('000'+CAST(number AS VARCHAR(3)),3) AS TheNumber FROM master..[spt_values] WHERE number BETWEEN 0 AND 96) numbers 

SELECT @QueryString = left(@QueryString, len(@QueryString) - 1) + ' FROM [YourTableName]' 

print @QueryString 

Gibt uns

SELECT [INT000],[INT001],[INT002],[INT003],[INT004],[INT005],[INT006],[INT007],[INT008],[INT009],[INT010],[INT011],[INT012],[INT013],[INT014],[INT015],[INT016],[INT017],[INT018],[INT019],[INT020],[INT021],[INT022],[INT023],[INT024],[INT025],[INT026],[INT027],[INT028],[INT029],[INT030],[INT031],[INT032],[INT033],[INT034],[INT035],[INT036],[INT037],[INT038],[INT039],[INT040],[INT041],[INT042],[INT043],[INT044],[INT045],[INT046],[INT047],[INT048],[INT049],[INT050],[INT051],[INT052],[INT053],[INT054],[INT055],[INT056],[INT057],[INT058],[INT059],[INT060],[INT061],[INT062],[INT063],[INT064],[INT065],[INT066],[INT067],[INT068],[INT069],[INT070],[INT071],[INT072],[INT073],[INT074],[INT075],[INT076],[INT077],[INT078],[INT079],[INT080],[INT081],[INT082],[INT083],[INT084],[INT085],[INT086],[INT087],[INT088],[INT089],[INT090],[INT091],[INT092],[INT093],[INT094],[INT095],[INT096] FROM [YourTableName] 

Dies wäre auch einfacher und besser sein sys.columns mit den Spaltennamen aufzulisten, aber da ich den Tisch nicht hier haben oder Zeit, sie zu verspotten Ich habe mit einer einfachen Nummer eins gegangen.

0

Sie können Ihre Abfrage erstellen, indem Sie das SQL dynamisch erstellen.

DECLARE @MAX INT = 97; 
DECLARE @NUM INT = 1; 
DECLARE @COLUMN NVARCHAR(500); 
DECLARE @SQL NVARCHAR (1000) = 'SELECT '; 

WHILE @NUM <= @MAX 
BEGIN 
    SET @COLUMN = RIGHT(REPLICATE(0, 3) + CAST(@NUM AS VARCHAR(3)), 3) 
    SET @NUM = @NUM + 1; 
    SET @SQL = @SQL + '[INT' + @COLUMN + '], ' 
END 

SET @SQL = @SQL + 'FROM [TABLENAME]' 

SELECT @SQL --This is just to see the query 

Sobald Sie die Abfrage haben, können Sie es, indem Sie Kopie ausführen und einfügen oder Sie können diese verwenden:

EXEC sp_executesql @SQL 
Verwandte Themen