[MS-SQL] 쿼리로 도메인 명 가져오기 .
음 아래처럼 하면 가져온다.
출처 : http://translate.google.co.kr/translate?hl=ko&langpair=en%7Cko&u=http://wiki.lessthandot.com/index.php/Get_The_Domain_Name_Of_Your_SQL_Server_Machine_With_T-SQL
DECLARE @DOMAINNAME NVARCHAR(100)
EXEC MASTER.DBO.XP_REGREAD
'HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',
N'CachePrimaryDomain',
@DOMAINNAME OUT
SELECT @DOMAINNAME
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
MS-SQL 2008 ] 테이블 컬럼 확장속성으로 설명 추가할 수 있는 도움 쿼리 (0) | 2011.10.04 |
---|---|
MS-SQL 2008 ] 테이블 정보 쿼리! (0) | 2011.09.27 |
[MS-SQL] 합계 쿼리. (0) | 2011.03.21 |
[MS-SQL] CTE 로 부서 이하직원들 불러올리는 쿼리... (0) | 2011.01.05 |
[ms-sql] Xml <--> DataTable 변환 쿼리... (0) | 2010.12.31 |
[MS-SQL] 합계 쿼리.
오라클 강좌를 보면서 멋지다 생각했던 쿼리를 ms-sql로 바꾸어 보았다.
물론 이 쿼리는 테스트용도로 변경한 쿼리임.
select (case [key] when '1' then ' '+t.[name] else '합계' end ) [구분],
sum( a ) [a합계],
sum( b ) [b합계]
from
(
select 'a' name, 1 a , 2 b
union all
select 'b' name, 1 a , 2 b
union all
select 'c' name, 1 a , 2 b
)t,
(
select '1' [key]
union all
select '2' [key]
)u
group by ( case [key] when '1' then ' '+t.name else '합계' end )
굵게 표시된 그룹바이 키는 동일하게 적용되어야 표시가 된다.
결과 :
## 집합 적인 사고!!! 카티션곱!!
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
MS-SQL 2008 ] 테이블 정보 쿼리! (0) | 2011.09.27 |
---|---|
[MS-SQL] 쿼리로 도메인 명 가져오기 . (0) | 2011.05.02 |
[MS-SQL] CTE 로 부서 이하직원들 불러올리는 쿼리... (0) | 2011.01.05 |
[ms-sql] Xml <--> DataTable 변환 쿼리... (0) | 2010.12.31 |
[MS-SQL]쿼리에 대한 성능 비교 해보기.. (0) | 2010.11.05 |
[MS-SQL] CTE 로 부서 이하직원들 불러올리는 쿼리...
문제가 좀 있는 쿼리로.. 해결방법을 고민중...
부서 정보를 끌어올리고 사용자 정보를 모아서
부서별 직원정보를 만든 후
>> 각 직원별 자기 상급자들을 하나의 컬럼에 순서대로 나열하고자 만든 쿼리이나..
>> 중간 부서에 다수의 상급자가 존재 시 이하 부서직원들의 갯수가 뻥튀기 되는 현상이 CTE에서 발생하는데
이를 해결할 다른 방법은 없는 것일까???
declare @BaseDept table
(
deptcode varchar(40 ),
parentdeptcode varchar(40),
deptname varchar(40)
)
insert into @BaseDept values( '000', null , '플랜트')
insert into @BaseDept values( 'a00', '000' , '공장1')
insert into @BaseDept values( 'b00', '000' , '공장2')
insert into @BaseDept values( 'c00', 'a00' , '검사')
insert into @BaseDept values( 'd00', 'a00' , '조립')
insert into @BaseDept values( 'e00', 'c00' , '수리')
insert into @BaseDept values( 'f00', 'b00' , '출하')
declare @BaseUser table
(
userId varchar(40),
deptcode varchar(40),
userName varchar(100)
)
insert into @BaseUser values ( 'u01', '000' , '사장1' )
insert into @BaseUser values ( 'u02', 'a00' , '공장1장장' )
insert into @BaseUser values ( 'u03', 'b00' , '공장2장장' )
insert into @BaseUser values ( 'u04', 'c00' , '테스터' )
insert into @BaseUser values ( 'u05', 'd00' , '조립맨' )
insert into @BaseUser values ( 'u06', 'e00' , 'A/s맨' )
insert into @BaseUser values ( 'u07', 'f00' , '오라이' )
insert into @BaseUser values ( 'u08', 'a00' , '잉여' )
declare @ttt table ( userid varchar(40) )
;with dept( deptcode , parentdeptCode , deptname , lvl , sort )as
(
select deptcode , parentdeptCode , deptname , 0 , cast( deptcode as varbinary(900))
from @BaseDept
where deptcode = '000'
union all
select a.deptcode , a.parentdeptCode , a.deptname , lvl + 1 , cast( sort + cast( a.deptcode as binary(3) ) as varbinary(900))
from @BaseDept a inner join dept b
on a.parentdeptCode = b.deptcode
)
, [user]( userid , deptcode , userName )as
(
select userid , deptcode , userName from @BaseUser
)
, dept_user( deptcode , parentdeptCode , deptname , lvl , sort, userid , userName)as
(
select a.deptcode , a.parentdeptCode , a.deptname , a.lvl , a.sort, b.userid , b.userName
from dept a left outer join [user] b on a.deptcode = b.deptcode
)
select row_number() over( order by b.deptcode ), replicate( '.------> ', lvl ) + deptName [Tree] , b.deptcode , parentdeptCode , deptname , lvl , sort, userid , userName, cnt, no
from dept_user b
left outer join
(
select row_number() over (order by deptcode, userid ) no, deptcode , count( 1 ) cnt
from dept_user
group by deptcode, userid
) c
on b.deptcode = c.deptcode
order by sort
--/* 각자의 상급자 컬럼을 추가 */
--
--,aboveDept_user ( [no], [no2], deptcode , parentdeptCode , deptname , ltl , srt , userid , userName , aboveuser ) as
--(
-- select cast( row_number() over( order by userid ) as int), 100, deptcode , parentdeptCode , deptname , 0 , cast( deptcode as varbinary(900)) , userid , userName , cast( '/' + userName as varchar(3000))
-- from dept_user
-- where deptcode = '000'
-- union all
-- select au.no , cast( row_number() over( order by du.userid ) as int) no2, du.deptcode, du.parentdeptCode, du.deptname , ltl +1 , cast( srt + cast( du.deptcode as binary(3) ) as varbinary(900)) , du.userid , du.userName, cast( aboveuser + '/' + du.username as varchar( 3000 ))
-- from dept_user du inner join aboveDept_user au
-- on du.parentdeptcode = au.deptcode
--)
--
--select replicate( '.------>', ltl ) + deptName [Tree] , *
--from aboveDept_user ms
--inner join
--(
-- select deptcode, max( isnull( case when no = 1 then userid+'('+ username+')' else '' end , '') ) + max( isnull( case when no = 2 then userid+'('+ username+')' else '' end , '') ) as [desc]
-- from aboveDept_user
-- group by deptcode
--) sl
--on ms.deptcode = sl.deptcode
----order by srt;
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
[MS-SQL] 쿼리로 도메인 명 가져오기 . (0) | 2011.05.02 |
---|---|
[MS-SQL] 합계 쿼리. (0) | 2011.03.21 |
[ms-sql] Xml <--> DataTable 변환 쿼리... (0) | 2010.12.31 |
[MS-SQL]쿼리에 대한 성능 비교 해보기.. (0) | 2010.11.05 |
[MS- SQL] 한방에 두개의 범위 데이타 그룹바이 걸기 (0) | 2010.11.05 |
[ms-sql] Xml <--> DataTable 변환 쿼리...
옛날 꼰날... 작업하던중
XML을 통째로 DataTable에 쿼리 하려고 했던적이 있었는데...
잊어버렸다가... 지금 하는 일에 다시 적용해야 될 사항이 생겨서 찾아서 예제로 남김.
어려운거 없다...
-- 예제 결과
-- XML 데이타
<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<INFO>
<SEQ>1</SEQ>
<OLDNM>a군</OLDNM>
<NEWNM />
</INFO>
<INFO>
<SEQ>2</SEQ>
<OLDNM>b군</OLDNM>
<NEWNM />
</INFO>
<INFO>
<SEQ>3</SEQ>
<OLDNM>c군</OLDNM>
<NEWNM />
</INFO>
</ROOT>
-- 예제 소스
DECLARE @INFO TABLE
(
SEQ VARCHAR(100),
NM VARCHAR(100)
)
INSERT INTO @INFO VALUES ('1', 'a군' )
INSERT INTO @INFO VALUES ('2', 'b군' )
INSERT INTO @INFO VALUES ('3', 'c군' )
SELECT SEQ, NM as OLDNM, '' [NEWNM] FROM @INFO
DECLARE @XML XML
SET @XML = REPLACE( (SELECT SEQ, NM as OLDNM, '' [NEWNM] FROM @INFO FOR XML PATH('INFO'), ROOT ('ROOT')) , '<ROOT>' , '<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >')
SELECT @XML AS [XML]
declare @RegistXML XML
set @RegistXML = '
<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<INFO>
<SEQ>1</SEQ>
<OLDNM>a군</OLDNM>
<NEWNM>x군</NEWNM>
</INFO>
<INFO>
<SEQ>2</SEQ>
<OLDNM>b군</OLDNM>
<NEWNM>b군</NEWNM>
</INFO>
<INFO>
<SEQ>3</SEQ>
<OLDNM>c군</OLDNM>
<NEWNM></NEWNM>
</INFO>
</ROOT>'
SELECT
M.Item.query('./SEQ').value('.','VARCHAR(100)') SEQ,
M.Item.query('./OLDNM').value('.','VARCHAR(100)') [OLDNM],
M.Item.query('./NEWNM').value('.','VARCHAR(100)') [NEWNM]
FROM @RegistXML.nodes('/ROOT/INFO') AS M(ITEM)
UPDATE @INFO
SET NM = T.[NEWNM]
FROM (
SELECT
M.Item.query('./SEQ').value('.','VARCHAR(100)') SEQ,
M.Item.query('./OLDNM').value('.','VARCHAR(100)') [OLDNM],
M.Item.query('./NEWNM').value('.','VARCHAR(100)') [NEWNM]
FROM @RegistXML.nodes('/ROOT/INFO') AS M(ITEM)
) T
INNER JOIN @INFO B
ON T.SEQ = B.SEQ and T.[NEWNM] <> ''
SELECT * FROM @INFO
/* XML을TABLE로*/
--SELECT * FROM TB_BASE_USER
--WHERE USER_NM LIKE 'KCC%'
반대로 table을 다시 xml로 바꿀때
declare @xxx xml = '<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">' + ( SELECT * FROM @INFO FOR XML PATH ('INFO') ) + '</ROOT>'
select @xxx
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
[MS-SQL] 합계 쿼리. (0) | 2011.03.21 |
---|---|
[MS-SQL] CTE 로 부서 이하직원들 불러올리는 쿼리... (0) | 2011.01.05 |
[MS-SQL]쿼리에 대한 성능 비교 해보기.. (0) | 2010.11.05 |
[MS- SQL] 한방에 두개의 범위 데이타 그룹바이 걸기 (0) | 2010.11.05 |
[MS-SQL] 누적 계산에 사용한 쿼리... (0) | 2010.10.23 |
[MS-SQL]쿼리에 대한 성능 비교 해보기..
[쿼리1.]
SELECT CNT, CASE WHEN 4 <= RET AND RET <= 7 THEN 1 ELSE 0 END RET, CASE WHEN 6 <= [PLAN] AND [PLAN] <= 10 THEN 1 ELSE 0 END PL
FROM @TABLE
WHERE RET BETWEEN 4 AND 7 OR [PLAN] BETWEEN 6 AND 10
SELECT ISNULL(SUM( CASE WHEN RET = 1 THEN CNT ELSE 0 END ),0) RETSUM , ISNULL(SUM( CASE WHEN PL = 1 THEN CNT ELSE 0 END ),0) PLANSUM
FROM(
SELECT CNT, CASE WHEN 4 <= RET AND RET <= 7 THEN 1 ELSE 0 END RET, CASE WHEN 6 <= [PLAN] AND [PLAN] <= 10 THEN 1 ELSE 0 END PL
FROM @TABLE
WHERE (RET BETWEEN 4 AND 7 OR [PLAN] BETWEEN 6 AND 10)
)K
[쿼리2.]
SELECT SA, SB
FROM
(
SELECT 'A' [KEY], SUM( CNT ) SA
FROM @TABLE
WHERE RET BETWEEN 4 AND 7
) A
INNER JOIN
(
SELECT 'A' [KEY], SUM( CNT ) SB
FROM @TABLE
WHERE [PLAN] BETWEEN 6 AND 10
)B
ON A.[KEY] = B.[KEY]
실행계획
http://aseuka.tistory.com/entry/MS-SQL 이 글에 이어 써본다.
위 두 쿼리 결과는 동일하게 4, 5가 나온다.
다만 테이블을 1번 읽었을때와 2번읽었을때를 비교해보기 위해 이글을 써보며
아직 해당 지식이 완전하게 흡수하지 못한점을 미리 써둔다.
일단 IO가 많이 발생하면 쿼리 개선이 필요하다고 하니...
1번 쿼리 2번 쿼리
IO 비용 : 0.0032035 (0.003125 * 2)
또 마지막 결과에 대한 트리비용에 대해 확인해보자
1번 쿼리 2번 쿼리
예상 하위 트리비용 : 0.0032846 0.0065743
Sort는 둘다 일어나지 않는다!
수치적으로 두배정도 차이나는데
2번 쿼리는 굳이 필요없는 Nested Loops 를 하고 있는 점.
동일 쿼리를 2번 행하고 있는것... 그림으로만 봐도 두배는 걸리는게 맞을것이다.
전에도 실행계획을 보다 보다 모르는게 많아서 패스 했는데
이참에 찾아서 정리해야겠다.
? Stream Aggregate
? Compute Scalar
? Nested Loops
Hash.. 어쩌고 저쩌고.. 참 많은뎁!!
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
[MS-SQL] CTE 로 부서 이하직원들 불러올리는 쿼리... (0) | 2011.01.05 |
---|---|
[ms-sql] Xml <--> DataTable 변환 쿼리... (0) | 2010.12.31 |
[MS- SQL] 한방에 두개의 범위 데이타 그룹바이 걸기 (0) | 2010.11.05 |
[MS-SQL] 누적 계산에 사용한 쿼리... (0) | 2010.10.23 |
[MS-SQL] SELECT 쿼리.. (0) | 2010.10.23 |
[MS- SQL] 한방에 두개의 범위 데이타 그룹바이 걸기
하나의 데이타 테이블에서 두개의 컬럼의 각각 범위로 조회를 한방에 해서
각각의 그룹바이를 취하는 방법...
역시 공부한 보람이 있다눈..
아래 그림에서 보다싶이 원본데이타에서
범위를 지정해서 범위내 데이타에 대해 컬럼 값을 1로 치환 하고
그 데이타를 그룹바이 걸어서 각각 값을 구하는 방법임.
declare @table table
(
[Cnt] int,
[ret] int,
[plan] int
)
insert into @table values(1, 1, 6 );
insert into @table values(1, 2, 7 );
insert into @table values(1, 3, 8 );
insert into @table values(1, 4, 9 );
insert into @table values(1, 5, 10 );
insert into @table values(1, 6, 11 );
insert into @table values(1, 7, 12 );
insert into @table values(1, 8, 13 );
select * from @table
SELECT CNT, CASE WHEN 4 <= RET AND RET <= 7 THEN 1 ELSE 0 END RET, CASE WHEN 6 <= [PLAN] AND [PLAN] <= 10 THEN 1 ELSE 0 END PL
FROM @TABLE
WHERE RET BETWEEN 4 AND 7 OR [PLAN] BETWEEN 6 AND 10
SELECT ISNULL(SUM( CASE WHEN RET = 1 THEN CNT ELSE 0 END ),0) RETSUM , ISNULL(SUM( CASE WHEN PL = 1 THEN CNT ELSE 0 END ),0) PLANSUM
FROM(
SELECT CNT, CASE WHEN 4 <= RET AND RET <= 7 THEN 1 ELSE 0 END RET, CASE WHEN 6 <= [PLAN] AND [PLAN] <= 10 THEN 1 ELSE 0 END PL
FROM @TABLE
WHERE (RET BETWEEN 4 AND 7 OR [PLAN] BETWEEN 6 AND 10)
)K
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
[ms-sql] Xml <--> DataTable 변환 쿼리... (0) | 2010.12.31 |
---|---|
[MS-SQL]쿼리에 대한 성능 비교 해보기.. (0) | 2010.11.05 |
[MS-SQL] 누적 계산에 사용한 쿼리... (0) | 2010.10.23 |
[MS-SQL] SELECT 쿼리.. (0) | 2010.10.23 |
[ MS-SQL ] 간단한 쿼리인데 3개의 Row에 대해 계산해서 한행 추가 (0) | 2010.10.23 |
[MS-SQL] 누적 계산에 사용한 쿼리...
오라클에서 했던걸 MS로 바꿔보았다
쿼리야 오라클이나 MS나...
누적이라서 ^^ 이정도면 뭐...
SELECT YEAR0_SUMAMT ,
(
SELECT SUM( YEAR0_SUMAMT )
FROM PLAN_RESULTS
WHERE YYYYMM <= A.YYYYMM
AND GIGUM_CODE = A.GIGUM_CODE
) YEAR0SUM
FROM PLAN_RESULTS A
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
[MS-SQL]쿼리에 대한 성능 비교 해보기.. (0) | 2010.11.05 |
---|---|
[MS- SQL] 한방에 두개의 범위 데이타 그룹바이 걸기 (0) | 2010.11.05 |
[MS-SQL] SELECT 쿼리.. (0) | 2010.10.23 |
[ MS-SQL ] 간단한 쿼리인데 3개의 Row에 대해 계산해서 한행 추가 (0) | 2010.10.23 |
[MS-SQL] 피벗 .. (0) | 2010.08.24 |
[MS-SQL] SELECT 쿼리..
SELECT 쿼리 처리순서인데... 대략 쿼리를 날려보면서 추측했던 내용인데
오라클 공부하면서 이거저거 뒤지다 찾았다.. 거의 틀리지 않네..
Ms-SQL 쿼리 처리 순서 http://technet.microsoft.com/ko-kr/library/ms189499.aspx |
SELECT 문의 처리 순서 |
다음 단계에서는 SELECT 문의 처리 순서를 보여 줍니다. |
1. FROM |
2. ON |
3. JOIN |
4. WHERE |
5. GROUP BY |
6. WITH CUBE 또는 WITH ROLLUP |
7. HAVING |
8. SELECT |
9. DISTINCT |
10. ORDER BY |
11. TOP |
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
[MS- SQL] 한방에 두개의 범위 데이타 그룹바이 걸기 (0) | 2010.11.05 |
---|---|
[MS-SQL] 누적 계산에 사용한 쿼리... (0) | 2010.10.23 |
[ MS-SQL ] 간단한 쿼리인데 3개의 Row에 대해 계산해서 한행 추가 (0) | 2010.10.23 |
[MS-SQL] 피벗 .. (0) | 2010.08.24 |
하루 종일 쌩쑈하다. (0) | 2009.08.13 |
[ MS-SQL ] 간단한 쿼리인데 3개의 Row에 대해 계산해서 한행 추가
C# 에 심취해서 쿼리에 대한 내용을 블로깅 해두지 않았었는데...
오라클을 다루다 보니 작업처리 방법등은 기록해두는것이 괜찮을듯 하다.
아래 색 처리한 부분은
F 3609565874.83333
K 0.002083333
T 369980.502170417
요런 데이타에
= SQRT( ( 2 * F * T ) * K ) 라는 결과값을 한행 더 추가해야 될 경우
위 세개의 데이타를 옆으로 펼치면..
F_AVG, T_AVG, K_AVG, F_BASE, T_BASE, K_BASE, F_UPPER, T_UPPER, K_UPPER
형태로 변환해서 계산식을 적용해주어야 한다.
이때 위 쿼리에 컬럼을 하나 추가하여 그룹바이로 통합시켜주면 1개의 쿼리로 바꿀수 있게 된다.
방법 1)
--USE [TestDB]
--GO
/****** 개체: Table [dbo].[Plan_Results] 스크립트 날짜: 10/23/2010 19:50:45 ******/
--SET ANSI_NULLS ON
--GO
--SET QUOTED_IDENTIFIER ON
--GO
--SET ANSI_PADDING ON
--GO
--CREATE TABLE [dbo].[Plan_Results](
-- [Gigum_Code] [char](1) COLLATE Korean_Wansung_CI_AS NOT NULL,
-- [YYYYMM] [char](7) COLLATE Korean_Wansung_CI_AS NOT NULL,
-- [Year0_SumAmt] [numeric](18, 6) NULL,
-- [Year3_SumAmt] [numeric](18, 6) NULL,
-- [Year5_SumAmt] [numeric](18, 6) NULL,
-- CONSTRAINT [PK_Plan_Results] PRIMARY KEY CLUSTERED
--(
-- [Gigum_Code] ASC,
-- [YYYYMM] ASC
--)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
--) ON [PRIMARY]
--
--GO
--SET ANSI_PADDING OFF
--insert into Plan_Results values ( 1 , '2010-01', 881728083,- 21455788882,- 26296054501 )
--insert into Plan_Results values ( 1 , '2010-02', 1663456166,- 93932311442,- 67724751121 )
--insert into Plan_Results values ( 1 , '2010-03', 10535184250,- 39727311735,- 27162544453 )
--insert into Plan_Results values ( 1 , '2010-04', 10916912333,- 37168124598,- 24826804875 )
--insert into Plan_Results values ( 1 , '2010-05', 10798640416,- 332748211345,- 200422034557 )
--insert into Plan_Results values ( 1 , '2010-06', 12360368500,- 546349938762,- 336875250117 )
--insert into Plan_Results values ( 1 , '2010-07', 8342096583,- 526987602935,- 321423734623 )
--insert into Plan_Results values ( 1 , '2010-08', 3223824666,- 395509716668,- 245811417447 )
--insert into Plan_Results values ( 1 , '2010-09', 5355552750,- 281646305135,- 157115087823 )
--insert into Plan_Results values ( 1 , '2010-10',- 562719166,- 233716812282,- 136073606419 )
--insert into Plan_Results values ( 1 , '2010-11',- 7580991083,- 193765514755,- 109664461049 )
--insert into Plan_Results values ( 1 , '2010-12',-12619263000,- 176147709331,- 95575440266 )
DECLARE @OP FLOAT
DECLARE @OP2 FLOAT
SET @OP = 2.50 /100 /12 -- 적용금리
SET @OP2 = 0.123 /100 /12 -- 운용수수료
SELECT 'F' AS [HEADER] ,
AVG( YEAR0_SUMAMT ) AS [AVG],
SUM( CASE WHEN RIGHT(YYYYMM,2)= '01' THEN YEAR0_SUMAMT ELSE 0 END ) AS [BASE],
MAX( YEAR0_SUMAMT ) AS [UPPER]
FROM PLAN_RESULTS
GROUP BY GIGUM_CODE
UNION
SELECT 'K', @OP, @OP, @OP
UNION
SELECT 'T' AS [HEADER] ,
AVG( YEAR0_SUMAMT ) * @OP2 AS [AVG],
SUM( CASE WHEN RIGHT(YYYYMM,2)= '01' THEN YEAR0_SUMAMT ELSE 0 END ) * @OP2 AS [BASE],
MAX( YEAR0_SUMAMT ) * @OP2 AS [UPPER]
FROM PLAN_RESULTS
GROUP BY GIGUM_CODE
UNION
SELECT 'C', SQRT( ( 2* SUM(CASE WHEN HEADER = 'F' THEN [AVG] ELSE 0 END ) * -- AVG1,
SUM(CASE WHEN HEADER = 'T' THEN [AVG] ELSE 0 END ) ) / -- AVG2,
SUM(CASE WHEN HEADER = 'K' THEN [AVG] ELSE 0 END ) ), -- AVG3,
SQRT( ( 2 * SUM(CASE WHEN HEADER = 'F' THEN [BASE] ELSE 0 END ) * -- BASE1,
SUM(CASE WHEN HEADER = 'T' THEN [BASE] ELSE 0 END ) )/ -- BASE2,
SUM(CASE WHEN HEADER = 'K' THEN [BASE] ELSE 0 END ) ), --BASE3,
SQRT( (2 * SUM(CASE WHEN HEADER = 'F' THEN [UPPER] ELSE 0 END ) *-- UPPER1,
SUM(CASE WHEN HEADER = 'T' THEN [UPPER] ELSE 0 END ) )/ -- UPPER2,
SUM(CASE WHEN HEADER = 'K' THEN [UPPER] ELSE 0 END ) ) -- UPPER3
FROM
(
SELECT 0 [KEY], 'F' AS [HEADER] ,
AVG( YEAR0_SUMAMT ) AS [AVG],
SUM( CASE WHEN RIGHT(YYYYMM,2)= '01' THEN YEAR0_SUMAMT ELSE 0 END ) AS [BASE],
MAX( YEAR0_SUMAMT ) AS [UPPER]
FROM PLAN_RESULTS
GROUP BY GIGUM_CODE
UNION
SELECT 0, 'K', @OP, @OP, @OP
UNION
SELECT 0, 'T' AS [HEADER] ,
AVG( YEAR0_SUMAMT ) * @OP2 AS [AVG],
SUM( CASE WHEN RIGHT(YYYYMM,2)= '01' THEN YEAR0_SUMAMT ELSE 0 END ) * @OP2 AS [BASE],
MAX( YEAR0_SUMAMT ) * @OP2 AS [UPPER]
FROM PLAN_RESULTS
GROUP BY GIGUM_CODE
) T
GROUP BY [KEY]
UNION
SELECT '_C', SQRT( ( 2* SUM(CASE WHEN HEADER = 'F' THEN [AVG] ELSE 0 END ) * -- AVG1,
SUM(CASE WHEN HEADER = 'T' THEN [AVG] ELSE 0 END ) ) / -- AVG2,
SUM(CASE WHEN HEADER = 'K' THEN [AVG] ELSE 0 END ) ) -- AVG3,
+ SUM( CASE WHEN HEADER = 'F' THEN [BASE] ELSE 0 END ),
SQRT( ( 2 * SUM(CASE WHEN HEADER = 'F' THEN [BASE] ELSE 0 END ) * -- BASE1,
SUM(CASE WHEN HEADER = 'T' THEN [BASE] ELSE 0 END ) )/ -- BASE2,
SUM(CASE WHEN HEADER = 'K' THEN [BASE] ELSE 0 END ) ) --BASE3,
+ SUM( CASE WHEN HEADER = 'F' THEN [BASE] ELSE 0 END ),
SQRT( (2 * SUM(CASE WHEN HEADER = 'F' THEN [UPPER] ELSE 0 END ) *-- UPPER1,
SUM(CASE WHEN HEADER = 'T' THEN [UPPER] ELSE 0 END ) )/ -- UPPER2,
SUM(CASE WHEN HEADER = 'K' THEN [UPPER] ELSE 0 END ) ) -- UPPER3
+ SUM( CASE WHEN HEADER = 'F' THEN [BASE] ELSE 0 END )
FROM
(
SELECT 0 [KEY], 'F' AS [HEADER] ,
AVG( YEAR0_SUMAMT ) AS [AVG],
SUM( CASE WHEN RIGHT(YYYYMM,2)= '01' THEN YEAR0_SUMAMT ELSE 0 END ) AS [BASE],
MAX( YEAR0_SUMAMT ) AS [UPPER]
FROM PLAN_RESULTS
GROUP BY GIGUM_CODE
UNION
SELECT 0, 'K', @OP, @OP, @OP
UNION
SELECT 0, 'T' AS [HEADER] ,
AVG( YEAR0_SUMAMT ) * @OP2 AS [AVG],
SUM( CASE WHEN RIGHT(YYYYMM,2)= '01' THEN YEAR0_SUMAMT ELSE 0 END ) * @OP2 AS [BASE],
MAX( YEAR0_SUMAMT ) * @OP2 AS [UPPER]
FROM PLAN_RESULTS
GROUP BY GIGUM_CODE
) T
GROUP BY [KEY]
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
[MS-SQL] 누적 계산에 사용한 쿼리... (0) | 2010.10.23 |
---|---|
[MS-SQL] SELECT 쿼리.. (0) | 2010.10.23 |
[MS-SQL] 피벗 .. (0) | 2010.08.24 |
하루 종일 쌩쑈하다. (0) | 2009.08.13 |
MS-SQL 에서의 한글 자음으로의 검색... (0) | 2009.06.26 |
[MS-SQL] 피벗 ..
간만에 쿼리 쓸라니 기억이 안나서 어렵군...
갑자기 피벗 쓸일이 있었는데... 가물 가물한 기억땜시롱...
간단한 예제로 써놓는답.
SELECT y, sum( case c when 'A' then i else 0 end ) AS AColumn ,sum( case A.c when 'B' then i else 0 end ) AS BColumn
FROM
(
SELECT '200812' AS Y , 'A' AS C, '1' AS I
UNION
SELECT '200812', 'B', '2'
)a
group by A.y
결과
Y AColumn BColumn
200812 1 2
Sum이 기억이 안나서 무진장 헤맸뉑...
CTE는 왜이리 어렵누..
추가 ~~~ : 반대로 할경우!!!
SELECT A.A, CASE B.[K] WHEN 1 THEN A.[1]
WHEN 2 THEN A.[2]
WHEN 3 THEN A.[3]
WHEN 4 THEN A.[4]
WHEN 5 THEN A.[5] END AS M
FROM
(
SELECT 'A' [A], 1 [1], 2 [2],3 [3],4 [4],5 [5]
)A
,
(
SELECT 1 K
UNION ALL
SELECT 2 K
UNION ALL
SELECT 3 K
UNION ALL
SELECT 4 K
UNION ALL
SELECT 5 K
)B
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
[MS-SQL] 누적 계산에 사용한 쿼리... (0) | 2010.10.23 |
---|---|
[MS-SQL] SELECT 쿼리.. (0) | 2010.10.23 |
[ MS-SQL ] 간단한 쿼리인데 3개의 Row에 대해 계산해서 한행 추가 (0) | 2010.10.23 |
하루 종일 쌩쑈하다. (0) | 2009.08.13 |
MS-SQL 에서의 한글 자음으로의 검색... (0) | 2009.06.26 |