J'ai une table avec 8 colonnes et 5000+ lignes.nombre de colonnes qui ont des données pour chaque ligne
J'avais besoin d'aide pour écrire t-sql select qui compterait pour chaque ligne le nombre de colonnes qui ne sont pas nulles.
J'ai une table avec 8 colonnes et 5000+ lignes.nombre de colonnes qui ont des données pour chaque ligne
J'avais besoin d'aide pour écrire t-sql select qui compterait pour chaque ligne le nombre de colonnes qui ne sont pas nulles.
Essayez cela, remplacer les deux occurrences de "catalogue" avec le nom de votre table. Cela a été testé avec succès sur SQL Server 2008 R2 Dev Edition dans la base de données ReportServer par défaut.
DECLARE @Sql nvarchar(max)
SET @Sql = 'SELECT 0'
SELECT
@Sql = @Sql + '
+ CASE WHEN [' + [sys].[columns].[name] + '] IS NULL THEN 1 ELSE 0 END'
FROM [sys].[columns]
WHERE [sys].[columns].[object_id] = OBJECT_ID('Catalog')
AND [sys].[columns].is_nullable = 1
SET @Sql = @Sql + '
AS [NullValuesCount] FROM [Catalog]'
PRINT @Sql
EXEC sp_executesql @Sql
Notez que cette approche est susceptible d'une attaque par injection SQL si vous ne pouvez pas faire confiance à la source des noms de colonnes (par exemple si les utilisateurs finaux peuvent provoque de créer des colonnes avec des noms sous leur contrôle).
Est-ce tsql valide (je quitte les tags de l'OP)? Je pensais que c'est MSSQLServer seulement? – DVK
@DVK: Oui, je l'ai testé dans SQL Server 2008 Dev Edition en utilisant la base de données ReportServer par défaut –
Cela fonctionne, a dû changer peu mais il a fait l'affaire –
SQL Transact pure (ne pas utiliser l'appel SQL dynamique qui ne fait pas partie de TSQL):
SELECT
CASE WHEN c1 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c2 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c3 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c4 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c5 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c6 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c7 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c8 IS NULL THEN 0 ELSE 1 END
FROM T
Il vous manque des 'WHEN's! –
@Daniel - oui. Duh. Fixé. thx – DVK
Voulez-vous spécifiquement ** TSQL (Transact SQL) ** ou tout code MS SQL Server, que ce soit TSQL valide ou non? – DVK