posted by 생존본능 2011.05.18 12:06

--pivot
select YEAR, [1] as '1분기', [2] as '2분기', [3] as '3분기', [4] as '4분기'
From (select YEAR, quater, amount from PivotT) as t1
pivot( sum(amount)
  for quater in ([1], [2], [3], [4]) ) as pvt;

PIVOT (집계함수(값이있는 열의 이름)
  FOR 피벗하고자하는열 in (목록))


--ROW_NUMBER()
SELECT Year
,  Part
,  quater
,  amount
,  ROW_NUMBER() OVER(ORDER BY 타겟 DESC) AS 'Row Nmber'
FROM PivotT
go

모든 개체의 넘버를 빠지는 번호없이 순서를 정하는 함수.


--RANK()
SELECT Year
,  Part
,  quater
,  amount
,  RANK() OVER(ORDER BY 타겟 DESC) AS 'rank'
FROM PivotT
go

개체의 타겟을 기준으로 순위를 매김.


--DENSE_RANK()
DENSE_RANK() OVER (ORDER BY amount DESC) as 'densh'

중복된 다음의 넘버가 건너뛰는 번호없이 모두 표시됨.


--NTILE(넘버)
NTILE(5) OVER (ORDER BY amount DESC) as 'tile'

0부터 넘버에 표시되는 숫자까지의 수를 균등하게 적용하여 표시됨.


--partition by
RANK() OVER(partition by 타겟 ORDER BY amount DESC) AS 'rank'

표시된 타겟을 같은수끼리 영역으로 묶어 영역별 순위를 매김.

 

 

 

 

 

/*
INSERT PivotT (Year,Part,quater,amount)
values (2001,'g',3,2.7);
*/

SELECT *
FROM PivotT
go

SELECT Year
,  Part
,  quater
,  amount
,  ROW_NUMBER() OVER(ORDER BY amount DESC) AS 'Row Nmber'
,  RANK() OVER(partition by Year ORDER BY amount DESC) AS 'rank'
,  DENSE_RANK() OVER (ORDER BY amount DESC) as 'densh'
,  NTILE(5) OVER (ORDER BY amount DESC) as 'tile'
FROM PivotT
go

신고
posted by 생존본능 2011.05.18 12:05

 

--WHERE 타겟 is not null
null인값은 표시하지 않음.

--group by
같은 데이터를 한데 묶음.

group by Title
Title이 같은 값을 한곳에 모음.

--having
묶인 그룹내에 검색추가.

SELECT 
  Title
,  COUNT(Title) as cnt
FROM Person.Contact
group by Title
HAVING Title = 'Ms.'
or Title = 'Mr.'


--with rollup
전체리스트의 합계라인추가.

SELECT
  CountryRegionName, StateProvinceName, city, COUNT(1) as cnt
FROM
  HumanResources.vEmployee
group by CountryRegionName, StateProvinceName, City
with rollup
order by CountryRegionName, StateProvinceName;

 

--GROUPING 그룹처리될때 원본인지 모여있는 값인지 표시.
SELECT
  CountryRegionName, StateProvinceName, city, COUNT(1) as cnt
,  GROUPING(CountryRegionName) as c1
,  GROUPING(StateProvinceName) as c2
,  GROUPING(City)    as c3
FROM
  HumanResources.vEmployee
group by CountryRegionName, StateProvinceName, City
with rollup
order by CountryRegionName, StateProvinceName;
위와 같을때는
c1에는 '0'(원본) 또는 '1'(모인값)로 표시됨.

 

when(GROUPING(CountryRegionName) = 1)then '총계'
when(GROUPING(StateProvinceName) = 1)then '국별합계'

신고
posted by 생존본능 2011.05.18 12:04

--============== 검색 =========================

/*
SELECT A FROM B
WHERE C = 'D'
A - (어떤값을 표시할지)
B - (어디서)
C - (어떤이름을)
D - (어떤값과 같은지 검색.)
SELECT id,address FROM customer
*/


--null구문
SELECT *
 FROM customer
 where email is null
 or email = ' '


null의경우 email = null의 방식이 아닌 is null로 검색한다.

--COUNT갯수체크
SELECT COUNT(*)
 FROM Production.Product

특정값의갯수를체크


--DISTINCT
SELECT COUNT(DISTINCT ListPrice)
 FROM Production.Product

DISTINCT를 앞에사용할경우 중복된 값은 제외된 갯수가 체크된다.


--검색된값 수정
SELECT ProductID, '['+Name+']', ListPrice
 from Production.Product
위와 같이 검색할경우 검색된 값에 '[]' 가 붙어서 나오게된다.


--============ LINK ========================

--415로시작하는 phone검색
SELECT * FROM Person.Contact
WHERE Phone LIKE '415%'

--415로끝나는 phone검색
WHERE Phone LIKE '%415'

/*
 '%415%' % 로 끝에 붙어있는 값을검색할지 앞에있는값을 검색할지 설정.
*/

 

--=========== 논리연산 ======================

--부분검색 Firstname이 'kim' 인 사람검색.
SELECT * FROM Person.Contact
WHERE FirstName = 'kim'


--and == && 두가지조건이 참인경우.
SELECT *
 FROM Person.Contact
 WHERE FirstName = 'kim'
 and LastName = 'Abercrombie'
FirstName이 'kim' 이고
LastName은 'Abercrombie' 인경우


--or == || 두가지조건중 한가지가 참인경우.
SELECT *
 FROM Person.Contact
 WHERE FirstName = 'kim'
 or LastName = 'Abercrombie'
FirstName이 'kim'이거나
LastName이 'Abercrombie'인경우

 

--not == ! 조건의 반대경우

SELECT *
 FROM Person.Contact
 WHERE not( FirstName = 'kim')

또는 WHERE not FirstName != 'kim'

FirstName이 'kim'이 아닌경우


--기본 논리연산
SELECT *
 FROM Production.Product
 WHERE StandardCost >= 100
 and StandardCost <= 120

기본논리연산도 사용가능.


--=========== 논리연산구문 ======================
기본논리연산과 유사하나, 더 간편하게 사용가능하다


-- BETWEEN(범위) n보다 크고 s보다작다
SELECT *
 FROM Production.Product
 WHERE StandardCost BETWEEN 100 and 120

WHERE StandardCost >= 100
and StandardCost <= 120
BETWEEN방식은 위방식과 동일하다.


--in
SELECT *
 FROM Production.Product
 WHERE ProductID in (515, 521)

WHERE ProductID == 515
or ProductID == 521
in 방식은 위방식과 동일하다.

 

--=========== 정렬 ======================
--order by

SELECT *
 FROM Production.Product
 order by Name

값을 기준으로 리스트 정렬하여 보여준다.
기본값은 오름차순이며

내림차순으로 할경우
order by Name desc
처럼 뒤에 desc를 붙여주면 된다.

 

SELECT ProductID,Color,Name
 FROM Production.Product
 order by Color, Name desc

여러정렬을동시에 할경우 "," 를 사용하여준다.

신고

티스토리 툴바