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

Създайте идентификатор/брояч въз основа на някои споделени колони и отделете въз основа на други колони

Използвайте прозоречна функция DENSE_RANK() с OVER() клауза:

DECLARE @tbl TABLE(Column1 INT,Column2 INT,Column3 VARCHAR(100));
INSERT INTO @tbl VALUES(1,1,'A')
                      ,(1,2,'A') 
                      ,(1,3,'B') 
                      ,(2,1,'A') 
                      ,(2,2,'A') 
                      ,(2,3,'B') 
                      ,(3,1,'A') 
                      ,(3,2,'B') 
                      ,(3,3,'V');

SELECT *
      ,DENSE_RANK() OVER(PARTITION BY Column1 ORDER BY Column3) AS ComputedColumn
FROM @tbl;

PARTITION BY ще рестартира брояча за всяка нова стойност в column1 , докато ORDER BY определя класирането.

Съвет:Не поставяйте снимки!

За следващия си въпрос, моля, следвайте моя пример, за да създадете самостоятелен пример, възпроизвеждащ проблема ви, и добавете кода, който сте изпробвали сами.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Agent не се стартира автоматично при рестартиране на сървъра

  2. Как мога да изтрия с помощта на INNER JOIN със SQL Server?

  3. Вмъкнете с обединение

  4. Защо SQL Server 2008 Management Studio Intellisense не работи?

  5. Много големи таблици в SQL Server