도구 -> 옵션 -> 프로젝트 및 솔루션 -> 일반 -> 솔루션 탐색기에서 활성화된 항목 추적
'닷넷' 카테고리의 다른 글
c# 가상메소드, 추상메소드 (0) | 2012.03.27 |
---|---|
c# String 과 string의 차이 (0) | 2012.03.27 |
닷넷 Unsafe Code의 묘미 with DllImport (0) | 2012.02.28 |
도구 -> 옵션 -> 프로젝트 및 솔루션 -> 일반 -> 솔루션 탐색기에서 활성화된 항목 추적
c# 가상메소드, 추상메소드 (0) | 2012.03.27 |
---|---|
c# String 과 string의 차이 (0) | 2012.03.27 |
닷넷 Unsafe Code의 묘미 with DllImport (0) | 2012.02.28 |
출처 : https://gent.tistory.com/516
SQL Server에서는 비율, 백분율(%)을 구하기 위해서는 OVER 절을 사용하여 전체 합계를 구한다면 연산을 하면 쉽게 해당 값을 구할 수 있다. 오라클의 RATIO_TO_REPORT 함수와 같은 비율을 구하는 함수가 존재하지 않기 때문에 직접 연산식을 만들어야 한다. 아래의 예제를 충분히 이해하면 쉽게 문제를 해결할 수 있을 것이다.
MSSQL 비율, 백분율 구하기
목차 |
SELECT ename
, sal
, CONVERT(float, sal) / SUM(sal) OVER() AS sal_ratio
FROM emp
WHERE job = 'SALESMAN'
비율 = 자신의 값 / 전체 합계
CONVER(float, sal)
MSSQL에서는 정수(피제수)와 정수(제수)를 나누면 소수점 이하의 값이 반환되지 않는다. 피제수와 제수 중 하나 이상의 값을 실수(소수점)로 형 변환을 하고 연산을 해야 소수점 이하의 값을 반환받을 수 있다.
SUM(sal) OVER()
OVER 절을 사용하면 조회된 전체 데이터의 합계를 구할 수 있다.
SELECT ename
, sal
, ROUND(CONVERT(float, sal) / SUM(sal) OVER(), 2) * 100 AS sal_percent
FROM emp
WHERE job = 'SALESMAN'
백분율(%) = 자신의 값 / 전체 합계 * 100
ROUND(비율, 2) * 100
비율의 소수점 2자리까지 반올림하여 자른 다음 100으로 곱하면 백분율을 구할 수 있다.
ROUND(비율 * 100, 2)와 동일한 결과를 얻을 수 있다.
SELECT job
, sum_sal
, ROUND(CONVERT(float, sum_sal) / SUM(sum_sal) OVER(), 2) * 100 AS sal_percent
FROM (
SELECT job
, SUM(sal) AS sum_sal
FROM emp
GROUP BY job
) AS emp_job
직업(job)별로 합산을 인라인 뷰로 사용하여 다시 한번 연산을 하면 직업별로 백분율을 구할 수 있다.
SELECT IIF(GROUPING_ID(job) = 1, '합계', job) AS job
, SUM(sal) AS sum_sal
, CONCAT(ROUND(SUM(sal) / MAX(total_sal), 2) * 100, '%') AS sal_percent
FROM (
SELECT job
, CONVERT(float, sal) AS sal
, SUM(sal) OVER() AS total_sal
FROM emp
) AS emp_job
GROUP BY ROLLUP(job)
ROLLUP를 사용하여 전체 합계 및 전체 백분율을 표시할 수 있다.
CONCAT(백분율, '%')
CONCAT 함수를 사용하면 백분율 값에 '%' 문자를 쉽게 붙일 수 있다. (예, 21%, 100%)
[MSSQL] 0으로 나누기 오류 발생2 (0) | 2023.10.27 |
---|---|
[MSSQL] MERGE를 사용하여 데이터 입력/수정/삭제를 한 번에 처리 (0) | 2023.08.30 |
[MSSQL] REPLICATE 동일한문자(문자열) 반복하기 (1) | 2022.08.31 |
[MSSQL] 정렬 order by 영문 한글 섞여있을때 (0) | 2022.06.28 |
[MSSQL] 쿼리문 테이블명 빨간 줄 발생 시 해결 방법 (0) | 2022.02.22 |
----------------------------------
아래코드로 해결
일반 스레드를 사용하면 위의 에러메세지가 발생했다.
스레드발생시 STA(단일 스레드 아파트) 모드로 해결된다.
--> 참고
ApartmentState
Thread 클래스에서 ApartmentState라는 것이 있다. VB6에서는 STA만을 지원했다는 것은 익히 알려진 사실이다. 굳이 여기서 VB6를 언급하는 것은 VB6로 작성한 컴포넌트를 닷넷에서 사용할 경우에는 이 ApartmentState를 특별히 지정할 필요가 있다. 이 속성은 COM과의 하위 호환성을 위해서 제공된다고 생각하면 된다.
STA와 MTA
ApartmentState는 STA와 MTA 구조가 있는데, Single Threaded Apartment라는 것은 하나의 쓰레드가 아파트를 소유하는 구조를 갖는다. 즉, 멀티 쓰레드를 제공할 수 없는 구조로 되어 있다. MTA는 Multi Threaded Apartment로 되어 있으며, 하나의 아파트에 여러 쓰레드가 세들어 살 수 있는 구조를 갖으며, 각각의 쓰레드가 독립된 방을 갖는 것이 허용된다. 즉, 멀티 쓰레드를 제공하기에 적합한 구조라고 할 수 있다. 이들을 지정하는 것은 다음과 같다.
Thread.CurrentThread.ApartmentState = ApartmentState.MTA;
Thread.CurrentThread.AprartmentState = ApartmentState.STA;
이와 같이 지정하는 방법도 있으며, 특성(attribute)을 사용하여 지정하는 방법도 있다. 이들은 System.STAThreadAttribute와 System.MTAThreadAttribute에 정의되어 있으며, 메소드 앞에 [STAThread] 또는 [MTAThread]와 같이 지정하면 된다. 주의할 점은 이미 시작된 쓰레드에 대해서는 아파트먼트를 지정할 수 없으므로 쓰레드를 시작하기 전(Thread.Start()를 호출하기 전)에 설정해야 한다.
닷넷에서는 MTAThread가 기본 설정이며, 이는 COM 객체와도 잘 맞는다. 다만, VB6로 작성한 DLL에 대해서만 호환성을 위해 STAThread를 사용하여 COM 객체에 대한 현재 쓰레드를 STA로 설정하도록 해야한다.
[C#] 델리게이트(delegate)와 이벤트(event) (0) | 2022.11.18 |
---|---|
[c#] app config connectionStrings 윈도우 인증 (0) | 2021.06.14 |
app.config에서 연결 문자열 암호화 (0) | 2020.07.21 |
[c#] Get Client IP address using WCF (0) | 2019.12.17 |
[C#] popup browser share session (새창 세션 공유) (0) | 2017.07.25 |
델리게이트(delegate)
delegate를 번역하면 "대리자"입니다. 한마디로 무엇인가를 대신해 준다는 거죠! C#에서 delegate는 메소드를 대신 호출해 줍니다.
delegate 선언 형식
delegate 키워드를 제외하면, 메소드 선언 형식과 동일하다.
★ delegate는 메소드를 대신 호출하기 때문에 매개변수의 형식과 개수, 반환형이 일치해야 한다!
..................................
[C#]스레드(Thread) 사용시 DragDrop을 등록하지 못했습니다. (0) | 2023.01.12 |
---|---|
[c#] app config connectionStrings 윈도우 인증 (0) | 2021.06.14 |
app.config에서 연결 문자열 암호화 (0) | 2020.07.21 |
[c#] Get Client IP address using WCF (0) | 2019.12.17 |
[C#] popup browser share session (새창 세션 공유) (0) | 2017.07.25 |
출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=diceworld&logNo=220238771371
REPLICATE
--> 문자열 값을 지정된 횟수만큼 반복합니다.
--> REPLICATE('문자열', [반복 횟수])
ex)
SELECT REPLICATE('REPLICATE ', 2) AS 결과 |
결과 |
REPLICATE REPLICATE |
[MSSQL] MERGE를 사용하여 데이터 입력/수정/삭제를 한 번에 처리 (0) | 2023.08.30 |
---|---|
[MSSQL] 비율, 백분율(퍼센트) 구하기 (0) | 2023.06.27 |
[MSSQL] 정렬 order by 영문 한글 섞여있을때 (0) | 2022.06.28 |
[MSSQL] 쿼리문 테이블명 빨간 줄 발생 시 해결 방법 (0) | 2022.02.22 |
[MSSQL] 특정 월의 N번째 특정 요일에 해당하는 날짜 찾기 DATEADD DATEDIFF datepart (0) | 2020.08.20 |