Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server :mengembalikan nama kolom berdasarkan nilai record

Anda juga dapat menggunakan Cross apply

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

Untuk bekerja secara dinamis gunakan ini.

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. Objek 'DF__*' bergantung pada kolom '*' - Mengubah int menjadi double

  2. Argumen Opsional dalam Klausa WHERE

  3. Cara Mengubah Nama Database di SQL Server menggunakan T-SQL

  4. Apa arti dari awalan N dalam pernyataan T-SQL dan kapan saya harus menggunakannya?

  5. Ekspor data dari SQL Server ke Excel dan file Teks menggunakan paket SSIS