Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

подреждане по параметър

Имате 2 опции, или да използвате оператор CASE, или да използвате динамичен sql

Това би бил пример за израза CASE

DECLARE @Table TABLE(
        Col1 VARCHAR(10),
        Col2 VARCHAR(10)
)

DECLARE @OrderBy VARCHAR(100)

SET @OrderBy = 'Col1'

SELECT  *
FROM    @Table
ORDER BY 
        CASE
            WHEN @OrderBy = 'Col1' THEN Col1
            WHEN @OrderBy = 'Col2' THEN Col2
            ELSE Col1
        END

И това ще бъде пример за динамичен sql

CREATE TABLE #Table (
        Col1 VARCHAR(10),
        Col2 VARCHAR(10)
)

DECLARE @OrderBy VARCHAR(100)

SET @OrderBy = 'Col1'

DECLARE @SqlString NVARCHAR(MAX)

SELECT @SqlString = 'SELECT * FROM #Table ORDER BY ' + @OrderBy

EXEC(@Sqlstring)

DROP TABLE #Table


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да ИЗБЕРЕМ множество колони в рамките на CASE WHEN на SQL Server?

  2. Денормализиране на данни (може би Pivot?)

  3. При каскада за изтриване за таблица за саморефериране

  4. Функцията за дял COUNT() OVER е възможна с помощта на DISTINCT

  5. Обединяване на данни от 2 таблици