반응형

 

 

[MSSQL] 랜덤 (무작위) Select


Select Top 10 * From 테이블명 Order by NEWID()


-- RAND() 난수 발생
select RAND() as rnd;
select convert(int, RAND()*100) as r1 -- 3자리 정수 추출 (0~999)
     , RIGHT(RAND(), 5)         as r2 --  임의의 5자리 숫자 추출

--정수형 난수
--최대값와 최소값을 포함할 때  
declare @max -- 최대값
declare @min -- 최소값
 
SELECT CONVERT(INT, ((@max + 1) - @min) * RAND()  + @min)

 

 

https://github.com/ngio/DB_query_mssql/blob/main/%EB%9E%9C%EB%8D%A4_select_NEWID_RAND.sql

반응형

'프로그래밍 > DataBase' 카테고리의 다른 글

[MSSQL] Multi UPDATE, 다중 UPDATE  (0) 2023.07.19
[MS-SQL] Begin Tran  (0) 2023.07.19
[MSSQL] IF…ELSE IF…ELSE  (0) 2023.07.14
[MSSQL] 월의 마지막 날짜 구하기  (0) 2023.07.03
[MSSQL] 날짜차이, 이전 행 정보 LAG LEAD  (0) 2023.07.03
반응형

 IF…ELSE IF…ELSE 

 

https://simplesqltutorials.com/if-elseif-else/

 

The IF…ELSE IF….ELSE Statement: Everything You Should Know

The IF...ELSE structure and the IF...ELSE IF...ELSE structure are the most basic SQL Server Decision Structures you should know.

simplesqltutorials.com

IF(<condition is true>)
BEGIN
<execute some code>
END
ELSE IF(<different condition is true>)
BEGIN
<execute some other code>
END
ELSE
BEGIN
<execute some other other code>
END
반응형
반응형

월의 마지막 날짜 구하기

SELECT EOMONTH('2020-09-09') AS result

SELECT DATEADD (DAY, -1, DATEADD (MONTH, DATEDIFF (MONTH, 0, '2020-09-09') + 1, 0)) AS result


SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, '2020-09-09') + 1, 0) - 1 AS result
반응형
반응형

DATEDIFF, DATEPART

SELECT DATEDIFF(DAY,   '2021-06-12', '2021-07-13') AS [일차이]
     , DATEDIFF(MONTH, '2021-06-12', '2021-07-13') AS [개월차이] 
     , DATEDIFF(YEAR,  '2021-06-12', '2021-07-13') AS [년차이]

 

LAG, LEAD

https://learn.microsoft.com/en-us/sql/t-sql/functions/lag-transact-sql?view=sql-server-ver16 

 

LAG (Transact-SQL) - SQL Server

LAG (Transact-SQL)

learn.microsoft.com

SELECT empno  
     , ename
     , job
     , sal
     , LAG(sal) OVER(PARTITION BY job ORDER BY job, sal) AS sal_prev
     , LEAD(sal) OVER(PARTITION BY job ORDER BY job, sal) AS sal_next
  FROM emp
 WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN')
 ORDER BY job, sal
 
 
 CREATE TABLE T (a INT, b INT, c INT);   
GO  
INSERT INTO T VALUES (1, 1, -3), (2, 2, 4), (3, 1, NULL), (4, 3, 1), (5, 2, NULL), (6, 1, 5);   
  
SELECT b, c,   
    LAG(2*c, b*(SELECT MIN(b) FROM T), -c/2.0) OVER (ORDER BY a) AS i  
FROM T;

https://learn.microsoft.com/en-us/sql/t-sql/functions/lead-transact-sql?view=sql-server-ver16 

 

LEAD (Transact-SQL) - SQL Server

LEAD (Transact-SQL)

learn.microsoft.com

CREATE TABLE T (a INT, b INT, c INT);   
GO  
INSERT INTO T VALUES (1, 1, -3), (2, 2, 4), (3, 1, NULL), (4, 3, 1), (5, 2, NULL), (6, 1, 5);   
  
SELECT b, c,   
    LEAD(2*c, b*(SELECT MIN(b) FROM T), -c/2.0) OVER (ORDER BY a) AS i  
FROM T;
반응형
반응형

명시적 값을 테이블의 ID 열에 삽입할 수 있도록 합니다.

 

https://github.com/ngio/DB_query_mssql/blob/main/SET_IDENTITY_INSERT.sql

 

GitHub - ngio/DB_query_mssql: mssql and Query

mssql and Query . Contribute to ngio/DB_query_mssql development by creating an account on GitHub.

github.com

USE AdventureWorks2012;  
GO  
-- Create tool table.  
CREATE TABLE dbo.Tool(  
   ID INT IDENTITY NOT NULL PRIMARY KEY,   
   Name VARCHAR(40) NOT NULL  
);  
GO  
-- Inserting values into products table.  
INSERT INTO dbo.Tool(Name)   
VALUES ('Screwdriver')  
        , ('Hammer')  
        , ('Saw')  
        , ('Shovel');  
GO  
  
-- Create a gap in the identity values.  
DELETE dbo.Tool  
WHERE Name = 'Saw';  
GO  
  
SELECT *   
FROM dbo.Tool;  
GO  
  
-- Try to insert an explicit ID value of 3;  
-- should return an error:
-- An explicit value for the identity column in table 'AdventureWorks2012.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel');  
GO  
-- SET IDENTITY_INSERT to ON.  
SET IDENTITY_INSERT dbo.Tool ON;  
GO  
  
-- Try to insert an explicit ID value of 3.  
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel');  
GO  
  
SELECT *   
FROM dbo.Tool;  
GO  
-- Drop products table.  
DROP TABLE dbo.Tool;  
GO
반응형
반응형

탭   : char(9)

 

select * from 테이블명

where 컬럼명 = char(9)

 

엔터값 : char(10) + char(13)

 

select * from 테이블명

where 컬럼명 = char(10) + char(13)

 

 

Tab char(9)
Line feed char(10)
Carriage return char(13)

 

select 'a'+char(9)+'b'

select 'a'+char(13)+'b'

select 'a'+char(10)+'b'

 

엑셀출력 등을 하거나 화면에서 공백을 제거해야할 경우 공백이랑 엔터 같이 제껴야 한다.

탭까지 제낄 필요있으면 char(9) 추가

 

REPLACE( REPLACE(column,char(13),'' ), char(10), '')

반응형
반응형

정렬 조건 없이 순번을 매겨보자

 

 

일반적으로 순번을 지정할 때 ROW_NUMBER(), RANK, DENSE_RANK 등을 이용한다.

 

[MSSQL] ROW_NUMBER, RANK, DENSE_RANK 순위함수
 

 

SELECT ROW_NUMBER() OVER(ORDER BY 컬럼명) FROM 테이블명
SELECT RANK() OVER(ORDER BY 컬럼명) FROM 테이블명
SELECT DENSE_RANK() OVER(ORDER BY 컬럼명) FROM 테이블명

 

 

 

이렇게 정렬할 기준 컬럼을 지정 후 순위를 매긴다.

 

하지만 SELECT 해서 나오는 결과 그대로 순위를 매기려고 한다.

 

SELECT ROW_NUMBER() OVER(ORDER BY 1)
FROM 테이블명

 

다음과 같이 ORDER BY 1로 하면 될 거 같은데...! 안된다..

 

그렇다면 어떻게 처리해야할까?

 

 

 

첫번째 방법. 의미없는 변수 사용

 

DECLARE @row INT = 1 -- 의미 없는 변수
 
SELECT ROW_NUMBER() OVER(ORDER BY @row)
FROM 테이블명

 

이렇게 의미없는 변수를 선언해주고 해당 변수를 ORDER BY 절에 넣어준다.

 

 

 

 

두번째 방법. SELECT 1 사용

 

SELECT ROW_NUMBER () OVER(ORDER BY (SELECT 1))
FROM 테이블명

 

 

 

반응형
반응형

NTILE(Transact-SQL)

정렬된 파티션의 행을 지정된 수의 그룹으로 분산시킵니다. 그룹에는 1부터 시작하는 번호가 매겨집니다. NTILE은 각 행에서 해당 행이 속한 그룹 번호를 반환합니다.

https://learn.microsoft.com/ko-kr/sql/t-sql/functions/ntile-transact-sql?view=sql-server-ver16 

 

NTILE(Transact-SQL) - SQL Server

NTILE(Transact-SQL)

learn.microsoft.com

USE AdventureWorks2012;   
GO  
SELECT p.FirstName, p.LastName  
    ,NTILE(4) OVER(ORDER BY SalesYTD DESC) AS Quartile  
    ,CONVERT(NVARCHAR(20),s.SalesYTD,1) AS SalesYTD  
    , a.PostalCode  
FROM Sales.SalesPerson AS s   
INNER JOIN Person.Person AS p   
    ON s.BusinessEntityID = p.BusinessEntityID  
INNER JOIN Person.Address AS a   
    ON a.AddressID = p.BusinessEntityID  
WHERE TerritoryID IS NOT NULL   
    AND SalesYTD <> 0;  
GO

 

FirstName      LastName              Quartile  SalesYTD       PostalCode  
-------------  --------------------- --------- -------------- ----------  
Linda          Mitchell              1         4,251,368.55   98027  
Jae            Pak                   1         4,116,871.23   98055  
Michael        Blythe                1         3,763,178.18   98027  
Jillian        Carson                1         3,189,418.37   98027  
Ranjit         Varkey Chudukatil     2         3,121,616.32   98055  
José           Saraiva               2         2,604,540.72   98055  
Shu            Ito                   2         2,458,535.62   98055  
Tsvi           Reiter                2         2,315,185.61   98027  
Rachel         Valdez                3         1,827,066.71   98055  
Tete           Mensa-Annan           3         1,576,562.20   98055  
David          Campbell              3         1,573,012.94   98055  
Garrett        Vargas                4         1,453,719.47   98027  
Lynn           Tsoflias              4         1,421,810.92   98055  
Pamela         Ansman-Wolfe          4         1,352,577.13   98027  

(14 row(s) affected)

 

반응형

+ Recent posts