-2
votes

Comment attribuer une valeur lorsque des lignes de lignes et des en-têtes de colonne correspondent à SQL Server 2012?

J'ai 400 colonnes et des en-têtes de rangées sur ma table. Vous pouvez imaginer cela comme une matrice avec des valeurs vierges. Besoin d'attribuer une valeur dans laquelle les en-têtes de colonne et de rangées sont identiques. Comme la colonne A à A à A puis affecter une valeur 6 A à B attribue une valeur 10.

exemple

Entrez la description de l'image ici

Quelqu'un peut-il m'aider à obtenir cette sortie?

SQL répond grandement apprécié si les fonctions d'Excel ne fonctionneront pas également.


5 commentaires

Comment une ligne a-t-elle une valeur de chaîne?


Bienvenue à cela. Votre formatage rend cela impossible à comprendre.


400 colonnes et 400 rangées? Qu'est-ce que les valeurs d'index sont vides et que vous devez attribuer une valeur moyenne ?? Maintenant d'où avez-vous compris 6 et 10?


Bonjour et bienvenue à. Comme indiqué que cette question n'a aucun sens. Tout n'est pas perdu cependant, vous pouvez améliorer cela. ici est un endroit idéal pour commencer.


C'est tellement si une base de données relationnelle doit être utilisée.


3 Réponses :



0
votes

OK, c'est codé dur et crée la table, mais:

  • Est-ce que cela fait ce que vous voulez? Oui li>
  • est-ce efficace? Oh non. Li>
  • Est-ce que ça échelle? Non, mais vous pouvez facilement em> modifier, c'est. Li>
  • Devriez-vous vraiment recevoir votre SGBDS cela? Certainement pas. Li> ul>

    Profitez: p>

    DECLARE @SQL nvarchar(MAX);
    
    WITH N AS (
        SELECT N
        FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL)) N(N)),
    Tally AS (
        SELECT TOP 400
               ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
        FROM N N1
             CROSS JOIN N N2
             CROSS JOIN N N3)
    SELECT @SQL = N'CREATE TABLE dbo.InsaneTable (' +
                  STUFF((SELECT N',' + NCHAR(10) +
                                N'                              ' + QUOTENAME(CONCAT('Column',I)) + N' int DEFAULT 10'
                         FROM Tally
                         FOR XML PATH(N'')),1,32,N'') + ');';         
    SELECT @SQL; --Your debugging friend. Not PRINT as we are way over 4,000 characters
    EXEC sp_executesql @SQL;
    GO
    DECLARE @SQL nvarchar(MAX);
    
    WITH N AS (
        SELECT N
        FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL)) N(N)),
    Tally AS (
        SELECT TOP 400
               ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
        FROM N N1
             CROSS JOIN N N2
             CROSS JOIN N N3)
    SELECT @SQL = STUFF((SELECT NCHAR(10) + N'INSERT INTO dbo.InsaneTable (' + QUOTENAME(c.[name]) + N') VALUES (6);'
                         FROM Tally Ty
                              JOIN sys.columns c ON c.column_id = Ty.I
                              JOIN sys.tables t ON c.object_id = t.object_id
                         WHERE t.[name] = 'InsaneTable'
                         FOR XML PATH(N'')),1,1,N'');
    SELECT @SQL; --Your debugging friend. Not PRINT as we are way over 4,000 characters
    EXEC sp_executesql @SQL;
    GO
    
    SELECT *
    FROM dbo.InsaneTable;
    
    GO
    DROP TABLE dbo.InsaneTable;
    


0 commentaires

0
votes

Je suppose que vous avez une colonne (probablement le premier ou la deuxième ou la deuxième) contenant l'appelé "en-tête de rangée" comme des tables SQL ne disposant pas de noms de ligne ou d'en-têtes.

supposant que cette colonne "Row en-cas" soit nommée " Column_a "et la première en-tête est par exemple" Header_A "puis une requête similaire à celle-ci doit suffire: xxx

Ceci peut ne pas être la meilleure solution à votre question. Si vous êtes capable de clarifier ce que l'on entend par l'en-tête de la rangée peut-être une meilleure solution peut être suggéré.


0 commentaires