블로그 이미지
프로그램을 가장 훌륭하게 작성하는 방법은 상태가 변경되는 오브젝트들과 수학적인 값을 나타내는 오브젝트들의 조합으로 표현하는 것이다. -Kent Beck 초초초보

카테고리

Programming (184)
ASP.NET (9)
Silverlight (2)
Javascript (20)
C# (8)
java (25)
SQL (14)
Oracle (3)
MyBatis (3)
기타 (52)
개발방법론 (1)
trouble shooting (2)
Linux (5)
스칼라 (5)
html (2)
grails & gradle (3)
Spring (2)
rabbitmq (1)
(3)
spark (0)
docker (3)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글


참조 : http://www.mvpmagazine.net/post/RowAs1Column.aspx

테이블
create table aa (idx int)
create table (bb idx int, namex varchar(10))

데이터

insert into aa values(1)
insert into aa values(2)

insert into bb values(1,'a')
insert into bb values(1,'b')
insert into bb values(1,'c')
insert into bb values(1,'d')
insert into bb values(1,'e')

insert into bb values(2,'a')
insert into bb values(2,'b')
insert into bb values(2,'c')
insert into bb values(2,'d')
insert into bb values(2,'e')

1차
declare @str varchar(1000)
--set @str =''
select @str = coalesce(@str + ',' +cast(bb.namex as varchar(10)),cast(bb.namex as varchar(10)))
from aa join bb on aa.idx = bb.idx
where aa.idx =1
select @str

결과값
a,b,c,d,e

2차
select idx, stuff(
(select ',' + cast(b.namex as varchar)
from aa a join bb b on a.idx = b.idx
where b.idx = aa.idx
group by b.namex, b.idx
order by b.namex
for xml path(''))
,1,1,'') as namex
from aa
where aa.idx in(1,2)
group by idx

결과값
idx    namex
1      a,b,c,d,e
2      a,b,c,d,e


--------------------------------------------------------------------------------------------------

SQL 2000 버전
이 예제는 테이블 하나로 테스트 한다.
사용자 함수를 이용한 쿼리

--테이블만든다
create table test
(
 id int,
 namex varchar(10)
)
go
-- 데이터 넣는다
insert into test values(1,'사과')
insert into test values(1,'배')
insert into test values(1,'딸기')
insert into test values(2,'참외')
insert into test values(3,'수박')
insert into test values(3,'수박')
insert into test values(6,'수박')
go

-- 같은 id 별로 namex 를 '값,값,' 으로 표현 해주는 사용자 함수
CREATE FUNCTION dbo.ConcatResult(@State CHAR(2))
RETURNS VARCHAR(8000)
AS
BEGIN
 DECLARE @Output VARCHAR(8000)


 SELECT @Output = COALESCE(@Output + ',','') + NAMEX
 FROM TEST
 WHERE ID = @State
 ORDER BY ID

 RETURN @Output
END
GO

-- 실제 적용 쿼리
SELECT DISTINCT ID, dbo.ConcatResult(ID) as NAMEX
FROM TEST
ORDER BY ID

--------------------------------------------------------------------------------------------------











Posted by 초초초보
, |

-- 데이터 타입이 int 형 일때
CREATE TABLE [dbo].[gogogo](
 [n] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
 [m] [int] NULL
)

insert into gogogo values('aaaaaa',111211)
insert into gogogo values('acccaa',11333111)
insert into gogogo values('adddaa',11444111)
insert into gogogo values('aaggga',11155511)
insert into gogogo values('ahhhaa',11166611)

-- money 형식으로 바꾸고 형변환
select n,convert(varchar(20), convert(money,m),1) as m from gogogo

-- 데이터 타입이 money 일때
create table tb_money(seq int identity, col1 money)
go
insert into tb_money(col1) values(1000)
insert into tb_money(col1) values(2000)
insert into tb_money(col1) values(3000)
go
select seq, convert(varchar(10), col1, 1) from tb_money
go

끝.

Posted by 초초초보
, |

원문 : http://www.ihelpers.co.kr/programming/tipntech.php?CMD=view&IDX=252&source=naverclick
참조 : http://msdn.microsoft.com/ko-kr/library/ms175170.aspx

-- 일단 테이블을 만들고
create table dbo.table1 (
        a    int
    ,    b int
    , c int
    )

예제 1 : INPUT 파라미터를 이용한 예제
-- 쿼리문을 생성 함.

    declare @table as nvarchar(20)
    declare @stmt as nvarchar(100)
    declare @params as nvarchar(100)

    set @table = 'dbo.table1'
    set @stmt = 'insert into ' + @table + ' '
set @stmt = @stmt + 'values (@a, @b, @c)'
    set @params = '@a int, @b int, @c int'
    
-- 시승템 프로시저인 sp_executesql  를 이용하여 쿼리를 날려줌..;
    exec sp_executesql @stmt, @params, @a=1, @b=2, @c=3

    -- 확인   
    select * from table1


예제 2 : OUTPUT 파라미터를 이용한 예제

-- 쿼리문 생성
    declare @stmt as nvarchar(100)
    declare @params as nvarchar(100)
    declare @orderret as int

    set @stmt = 'select @ordercnt = count(*) from dbo.table1'
    set @params = '@ordercnt as int OUTPUT' -- OUTPUT 키워드에 주의

    -- 여기도 OUTPUT 키워드를 지정한다.
    exec sp_executesql @stmt, @params, @ordercnt = @orderret OUTPUT

    -- 확인   
    select @orderret











Posted by 초초초보
, |

SQL CTE를 이용한 재귀 쿼리

SQL / 2008. 12. 31. 17:06

참조 : http://msdn.microsoft.com/ko-kr/magazine/cc163346.aspx
샘플 DB : northwind
샘플 DB 다운 : http://code.msdn.microsoft.com/northwind/Release/ProjectReleases.aspx?ReleaseId=1401

예제

;with RecursionCTE(EmployeeID, ReportsTo, FirstName)as
(
select EmployeeID, ReportsTo, FirstName
from employees
where employeeid =2
union all
select e.employeeid, e.reportsto, e.firstname
from employees e join
RecursionCTE r on e.reportsto = r.employeeid
)
select * from RecursionCTE option (maxrecursion 2)

Posted by 초초초보
, |