sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:vrátí názvy sloupců na základě hodnoty záznamu

Můžete také použít Cross apply

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

Chcete-li pracovat dynamicky, použijte toto.

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. SQL vztah mnoho k mnoha mezi více tabulkami

  2. SSRS - Group_Concat ekvivalentní pomocí výrazu?

  3. Jak přidat nenulové omezení do existujícího sloupce v MySQL

  4. Proč se jednoduchý kód mysql++ kompiluje samostatně, ale ne v projektu?