Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server :zwracaj nazwy kolumn na podstawie wartości rekordu

Możesz także użyć Cross apply

SELECT Cname
FROM   Tablename
       CROSS apply (VALUES('Field1',Field1),
                          ('Field2',Field2),
                          ('Field3',Field3),
                          ('Field4',Field4)) ca (cname, data)
WHERE  data = 1 

Aby pracować dynamicznie, użyj tego.

CREATE TABLE test
  (
     Field1 INT,
     Field2 INT,
     Field3 INT,
     Field4 INT
  )

INSERT INTO test
VALUES      ( 1,0,0,1 )

DECLARE @collist VARCHAR(max)='',
        @sql     NVARCHAR(max)

SELECT @collist += '(''' + COLUMN_NAME + ''',' + COLUMN_NAME + '),'
FROM   INFORMATION_SCHEMA.columns
WHERE  TABLE_NAME = 'test'
       AND COLUMN_NAME LIKE 'Field%'
       AND TABLE_SCHEMA = 'dbo'

SELECT @collist = LEFT(@collist, Len(@collist) - 1)

SET @sql ='
SELECT Cname
FROM   test
       CROSS apply (VALUES' + @collist
          + ') ca (cname, data)
WHERE  data = 1 '

EXEC Sp_executesql
  @sql 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rozwiązywanie problemów z replikacją serwera SQL

  2. Jak przekonwertować listę liczb na (tymczasową) tabelę za pomocą SQL (SQL Server)

  3. Suma podzapytań w SQL Server

  4. Jak zamienić wartości null na nieznane w instrukcji Select w SQL Server — samouczek SQL Server / TSQL, część 111

  5. Sortowanie bez rozróżniania wielkości liter w programie SQL Server