레이블이 mssql인 게시물을 표시합니다. 모든 게시물 표시
레이블이 mssql인 게시물을 표시합니다. 모든 게시물 표시

2020년 10월 14일 수요일

mssql 데이터 복사(특정열변환,ex)시간),임시테이블,where문

 



IF OBJECT_ID ('tempdb..#tmp_ssss') IS NOT NULL
BEGIN
DROP TABLE #tmp_ssss
END

select * into #tmp_ssss from (select * from TB_FUEL_KPI_MODEL where '2020-08-03' <= Date and Date<'2020-08-04')as tt
select * from #tmp_ssss
UPDATE #tmp_ssss set Date = SUBSTRING(Date,1,7)+'4'+SUBSTRING(Date,9,13)
select * from #tmp_ssss



DB에 현재 3일에 있는 데이터를 4일로 옮김



두자리일때는 substring을 6까지만 잘라줘야함


IF OBJECT_ID ('tempdb..#tmp_ssss') IS NOT NULL
BEGIN
DROP TABLE #tmp_ssss
END

select * into #tmp_ssss from (select * from TB_FUEL_KPI_MODEL where '2020-08-04' <= Date and Date<'2020-08-05')as tt
UPDATE #tmp_ssss set Date = SUBSTRING(Date,1,6)+'19'+SUBSTRING(Date,9,13)
insert into TB_FUEL_KPI_MODEL select * from #tmp_ssss




2020년 8월 12일 수요일

[mssql] like, Group by, Union 사용 예

 


like를 이용해서 검색하는 쿼리



union,Group by 를 사용해서 데이터 추출하는 쿼리

[mssql] union GroupBy, 인자 엄청많이 받는 쿼리

 





미들웨어의 xmlquery파일중 하나.


인자가 엄청많다 130개 이상을 받아서 처리했엇다

[쿼리] 그룹 by Group by 컬럼

 

######### KPI3 해결 과정 ######### 


목표

9.KPI3 
    조회기간 : 1주일-> 1 로변경
    
     추가 : 전체,1,2,3,4
    
    가열로  A,B
    
    
    
    A = 실적입열량   -> TB_FUEL_KPI_Model   Date,Fce_No,Gas_Flow
    B = 예측입열량   -> TB_FUEL_KPI         Date,Fce_No,Gas_Flow
    C = A/B 비례개수
    result = C의 표준편차

    기본 계산공식 A,B,C

    A,B 도출 공식:
    0700~1900 오전 Sum(A),Sum(B) ,C = Sum(A)/Sum(B)
    1900~0700 오후 Sum(A),Sum(B) ,C = Sum(A)/Sum(B)
    result = avg(C) 의 표준편차

######### KPI3 해결 과정 ######### 


테이블에 있는 데이터 확인

TB_FUEL_KPI       ->예측
TB_FULE_KPI_MODEL ->실측

테이블 모양(간략화)

DATESTART,DATEEND,GAS_FLOW,FCE_NO 





원하는 데이터

특정 기간내 의 하루를 오전 오후로 나눈 시간의 
    TB_FUEL_KPI_MODEL의 SUM(GAS_FLOW) as GAS_FLOW_A
    TB_FUEL_KPI의 SUM(GAS_FLOW) as GAS_FLOW_B
    값(FCE_NO당)

어려웠던 점

일단 쿼리로 전부 합계까지 구해서 해결하려고 조인이나 여러가지를 써봤는데 중복으로 계산이 되어서 sum값을 찾을수가 없었다

이유는 기준이 되는 데이터가 없다 (DATE가 같지않음)

그래서 여러 컬럼이 1:N이 되어버려서 중복 계산이 되는것

그리고 A,B를 한번에 컬럼으로 뽑아내는 쿼리도...결국 실패하여서

TABLE 이름으로 나누어서 쿼리를 짜서 클라이언트에서 A,B를 구분하기로 함





결국은 오전의 결과 쿼리 + 오후의 결과 쿼리 

select *from(
  SELECT FCE_NO, MIN(DateStartas startDate, MAX(DateStartas endDate, SUM(Gas_Flowas Gas_Flow_A, 'TB_FUEL_KPI_MODEL' as table_name
  FROM TB_FUEL_KPI_MODEL
  where {0} <= DateStart and DateStart< {1}
  GROUP by FCE_NO
  union
  Select FCE_NO, MIN(DateStartas startDate,MAX(DateStart)as endDate,SUM(Gas_Flow) as Gas_Flow_B,'TB_FUEL_KPI' as table_name
  from TB_FUEL_KPI
  where
{0} <= DateStart and DateStart< {1}
  Group by Fce_No
)AS b

 쿼리를 하면 결과값은

FCE_NOstartDate,endDate,Gas_Flow,table_name

으로 결과값이 나온다


그러면 클라이언트에서 데이터를 위의 형식으로 모든 날짜에 대하여 받는다



컨버팅 과정은 dictionary와 새로운 데이터클래스를 정의하여서 해결했다.

정의한 데이터 클래스

public class KPI3_Datas
{
    public int fce_no;
    public string startDT;
    public string endDT;
    public double Gas_A//Tablename 이 TB_FUEL_KPI_MODEL이라면 A
    public double Gas_B//Tablename이 TB_FUEL_KPI이라면 B
    public KPI3_Datas(int fce_no,string startDT,string endDT,double Gas_A,double Gas_B)
    {
        this.fce_no = fce_no;
        this.startDT = startDT;
        this.endDT = endDT;
        this.Gas_A = Gas_A;
        this.Gas_B = Gas_B;
    }
}

데이터를 한번 for문  돌리면 결국 A,B를  채울수 있다.
결론 :KPI3_Datas의 데이터는 두개의 데이터가 있어야 A,B가  찬다.

같은 데이터라는것은 key 값을 
    string key = x.Fce_No + x.endDate.Substring(0,9); //초단위 까지 말고 시단위 까지 같으면 같은걸로 쳐주자
    ///key 값 (enddate)값에 대한 dic가 있다면 비어있는 A,B중 하나를 채워준다.//string key = x.Fce_No + x.endDate.Substring(0, 10); 
        /////초단위 까지 말고 시단위 까지 같으면 같은걸로 쳐주자
    //데이터가 이상한건지 매칭이 잘 안됨 9까지 줄이자
    //20200702070000 => 2020070207 까지 줄이기 8까지 해야하나...
    
    이런식으로 시간 + fce_no을 해서 데이터를 구분했다.

실제 컨버팅 함수


foreach (var x in currentData._kPI3Items///서버에서 받은 데이터를 모두 확인한다.
        {
            //if (x.Fce_No == null)

            ///key 값 (enddate)값에 대한 dic가 있다면 비어있는 A,B중 하나를 채워준다.//string key = x.Fce_No + x.endDate.Substring(0, 10); 
            /////초단위 까지 말고 시단위 까지 같으면 같은걸로 쳐주자//데이터가 이상한건지 매칭이 잘 안됨 9까지 줄이자//20200702070000 => 2020070207 까지 줄이기 8까지 해야하나...
            string key = x.Fce_No + x.endDate.Substring(0,10); //초단위 까지 말고 시단위 까지 같으면 같은걸로 쳐주자\

            if (dic_date.ContainsKey(key))
            {
                //기존데이터라면 부족한 데이터를 채워준다
                if (x.table_name == "TB_FUEL_KPI_MODEL")
                    dic_date[key].Gas_A = x.Gas_Flow;
                else
                    dic_date[key].Gas_B = x.Gas_Flow;
            }
            else
            {
                KPI3_Datas tmp;
                ///새로운 데이터가 들어왔다면 table 이름에 따라 A,B를 채워준다
                switch (x.table_name)
                {
                    case "TB_FUEL_KPI_MODEL":
                        //A 실측값 TB_FULE_KPI_Model
                        tmp = new KPI3_Datas(x.Fce_Nox.startDatex.endDatex.Gas_Flow0);
                        dic_date.Add(keytmp);
                        break;
                    case "TB_FUEL_KPI":
                        //B 예측값 TB_FULE_KPI
                        tmp = new KPI3_Datas(x.Fce_Nox.startDatex.endDate0x.Gas_Flow);
                        dic_date.Add(keytmp);
                        break;
                }
            }
        }

























2019년 11월 20일 수요일

#JOIN(내부 조인),UNION,하위질의 #쿼리 # 순위정하기


내부 조인 -- 아마 보통 쓸 일이 없을듯 하다
SELECT tb1.number, tb1.name
FROM tb1
JOIN tb
ON tb1.number=tb.number;





출처: https://recoveryman.tistory.com/179 [회복맨 블로그]

5.3 최댓값 표시하기 - 값을 반환하는 하위 질의 1
다음과 같은 문제는 과연 어떻게 처리하면 좋을까요?

◼︎ 테이블 tb에서 칼럼 sales의 최대값이 있는 레코드를 표시한다.

'매출정보 테이블 tb에서 매출이 가장 높은(sales가 최대) 사원의 데이터를 표시하시오.' 라는 문제입니다. 칼럼의 최댓값을 구할 때에는 MAX() 함수를 사용합니다. 다음 테이블 tb의 구조를 보고 잠깐 생각해 보겠습니다.




아마도 많은 분들이 다음과 같은 명령문을 생각했을 것입니다.

SELECT * FROM tb WHERE sales=MAX(sales);


하지만, 이 명령문을 실행하면 오류가 발생합니다.



단순하게 MAX(sales)라고 작성해서는 sales의 최댓값을 계산할 수 없습니다. 만약, MAX(sales)를 계산하려면, 먼저 다음 명령을 실행해야 합니다.

SELECT MAX (sales) FROM tb;


최댓값에 해당하는 레코드를 추출하려면, 먼저 이 명령으로 최댓값을 구하고 그 값을 사용해서 테이블 tb에서 다시 값을 추출해야 합니다.

여기에서, 하위 질의가 활약하게 됩니다. 먼저, 1단계에서 해당 질의로 MAX(sales)의 값을 구합니다. 그러고 나서 2단계에서 MAX(sales)로 구한 최댓값을 포함한 칼럼 sales의 레코드를 SELECT합니다.


SELECT * FROM tb WHERE sales IN (1단계에서 처리한 결과)

'~을 포함한다'라는 조건 WHERE ~ IN을 사용하는 방법은 8장 3.3 비교 연산자를 참고합니다. 1단계의 하위 질의는 괄호() 안에 기술합니다. 괄호를 사용하지 않으면 오류가 발생하니 주의하도록 합니다.

그러면 실제로 예를 들어 설명하겠습니다. 테이블 tb에서 칼럼 sales의 값이 가장 큰 레코드를 표시합니다.

다음 명령을 실행합니다.
SELECT *
FROM tb
WHERE sales
IN (SELECT MAX(sales) FROM tb);








IN 사용하기 - 칼럼을 반환하는 하위 질의
이번에는 하위 질의가 칼럼을 반환하는 예입니다. 1단계의 하위 질의에서 조건에 일치하는 칼럼을 반환하고 2단계에서 그 칼러을 포함한 값을 추출합니다. 이 때에는 다음과 같이 IN을 사용합니다.

IN을 사용한 하위 질의
SELECT 표시할_칼럼 FROM 테이블_이름
WHERE 칼럼_이름 IN (SELECT를_이용한_하위_질의로_추출한_칼럼);

1단계의 질의(하위 질의)는 반드시 괄호 안에 기술해야 합니다. 1단계에서 추출한 칼럼에 포함된다는(IN) 조건으로 2단계 질의를 실행합니다. 여기에서는 다음 작업을 실행합니다.

◼︎ 매출이 200 이상인 사원 이름을 표시한다.

이 경우 구체적인 처리는 다음과 같습니다.

◼︎ 매출정보 테이블 tb에서 매출(sales)이 200 이상인 사원번호( number)를 추출하고, 사원정보 테이블 tb1에서 해당 사원 이름(name)을 표시한다.

즉, 1단계에서 실행할 하위 질의는 테이블 tb에서 sales>=200의 조건에 일치하는 사원번호 number를 추출하는 것입니다.

SELECT number FROM tb WHERE sales>=200;

그리고 2단계에서는 1단계에서 추출한 number를 포함하는 레코드를 tb1에서 추출합니다.

SELECT * FROM tb1 WHERE 조건

이 '조건'부분에 1단계에서 추출한 A101과 A102를 포함한다는 내용을 기술합니다. 이때, WHERE ~ IN ~을 사용합니다.

하위 질의를 사용해서 테이블 tb에서 매출(sales)이 200 이상인 number를 추출하고, 테이블 tb1에서 해당하는 레코드를 표시해 보겠습니다.

다음 명령을 실행합니다.
SELECT *
FROM tb1
WHERE number
IN (SELECT number FROM tb WHERE sales>=200);



예상대로 A101과 A102가 표시되었습니다.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

하위 질의와 내부 조인의 실행 결과 - 비슷한 듯 다르다!
하위 질의와 내부 조인은 많이 비슷합니다. 예를 들어, 매출정보 테이블 tb에 존재하는 사원번호 number와 일치하는 사원정보를 테이블 tb1에서 찾아서 사원번호(number)와 이름(name)을 표시하는 경우, 하위 질의와 내부 조인으로 각각 표현하면 다음과 같습니다.

하위 질의
SELECT number, name
FROM tb1
WHERE number
IN (SELECT number FROM tb);


내부 조인
SELECT tb1.number, tb1.name
FROM tb1
JOIN tb
ON tb1.number=tb.number;


실행 결과는 다릅니다. 하위 질의를 사용하면 테이블 tb에 존재하는 number를 먼저 검색하고, 테이블 tb1에서 일치하는 레코드만 표시합니다. 이에 비해 내부 조인은 테이블 tb에 있는 모든 레코드를 표시합니다.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%







5.6 IN 대신에 등호를 사용하면 오류가 발생한다?
앞에서 소개한 IN을 사용하지 않고 다음과 같이 등호(=)를 사용해도 되지 않을까 하고 생각한 분도 있을 것입니다.

SELECT *
FROM tb1
WHERE number = (SELECT number FROM tb WHERE sales>=200);

앞의 명령문을 실행하면 'Subquery returns more then 1 row'(하위 질의가 1건 이상 검색되었다!)라는 오류가 표시됩니다. 'number가 ✕ ✕와 정확하게 일치한다.'라는 조건이라면 등호를 사용해도 상관 없지만, 이 예에서는 여러 개의 레코드가 추출되기 때문에, '...중에 어느 것'이라는 의미의 IN을 사용해야 합니다.

물론, 해당 레코드가 1건밖에 없을 때에는 등호를 사용해도 오류가 발생하지는 않습니다. 예를 들어, 다음은 LIMIT를 사용해서 1건만 추출하는 예입니다. 이렇게 하면, 적어도 오류는 피할 수 있습니다.


SELECT *
FROM tb
WHERE number
= (SELECT number FROM tb1 WHERE sales>=200 LIMIT 1);

그러나 이렇게 하면 안타깝게도 A101이 추출될지 A102가 추출될지 알 수 엇어서 LIMIT는 도움이 되지 않습니다.


값이 큰 순서로 정렬해서 맨 앞의 1개만 표시할 수는 있습니다. 다음은 ORDER BY를 사용해서 '매출이 가장 높은 사원'이라는 조건으로 데이터를 추출하는 예입니다. 1단계에서는 테이블 tb에서 sales의 최댓값에 해당하는 number를 검색하고, 2단계에서는 테이블 tb1에서 1단계에서 추출한 값에 해당하는 레코드를 추출하고 있습니다.

SELECT *
FROM tb1
WHERE number
= (SELECT number FROM tb ORDER BY sales DESC LIMIT 1);


LIMIT로 1건만 추출했기 때문에 등호를 사용해도 오류가 발생하지 않습니다.


5.7 EXISTS를 사용해서 존재하는 레코드를 대상으로 검색하기
위에서 설명한 하위 질의는 WHERE ~ IN (SELECT ...) 형태였습니다. 이 형태는 1단계의 하위 질의가 해당하는 칼럼 데이터를 반환하는 것이었습니다. 예를 들면, 위의 예에서는 'A101, A102의 칼럼'이라는 칼럼 데이터가 반환되고, 그 값을 포함하는 레코드가 추출 대상이었습니다.

이에 비해, 특정 칼럼이 아닌 '대상이 되는 레코드가 존재한다.'라는 정보를 반환하는 것이 EXISTS입니다.

실제 예를 들어 설명하겠습니다. 사원정보 테이블 tb1에는 매출정보 테이블 tb에 존재하지 않는 사원번호를 가진 레코드도 포함되어 있습니다. 바로 A105입니다. 즉, A105 사원은 매출이 없다는 뜻입니다.

그러면 사원정보 테이블에서 매출이 있는 사원의 레코드를 하위 질의로 표현해 보겠습니다. 구체적으로는 다음과 같습니다.

◼︎ 테이블 tb에 존재하는 레코드를 추출하고, 테이블 tb1에서 해당하는 레코드를 표시한다.

먼저, 사원정보 테이블 tb1의 레코드를 표시합니다.

SELECT * FROM tb1

그리고, '매출이 있는 사원만'이라는 조건은 사원번호 number가 테이블 tb와 tb1 양쪽에 모두 존재한다는 의미이므로 다음과 같이 표현합니다.

WHERE tb.number=tb1.number

1단계에서는 테이블 tb에서 이 조건에 일치하는 레코드를 검색합니다.

SELECT * FROM tb WHERE tb.number=tb.number

이 명령은 특정 칼럼이 아니라 조건에 맞는 레코드를 추출하는 것입니다. 그리고 2단계에서는 EXISTS를 사용해서 테이블 tb1에 존재하는 해당 헤코드만 표시합니다.



다음 명령을 실행합니다.
SELECT *
FROM tb1
WHERE EXISTS
(SELECT * FROM tb WHERE tb.number=tb1.number);



테이블 tb에는 A105의 number가 존재하지 하지 않기 때문에 표시되지 않습니다.


5.8 NOT EXISTS 사용하기
반대로 NOT EXISTS는 하위 질의로 추출되지 않는 레코드를 대상으로 합니다. 이번에는 '매출이 없는 사원'의 레코드 만을 대상으로 하위 질의를 실행해 보겠습니다.

위에 EXISTS를 NOT EXISTS로 바꾸기만 하면 됩니다. NOT EXISTS를 사용해서 테이블 tb에 존재하지 않는 레코드의 number만 추출하고, 테이블 tb1에서 해당하는 레코드를 표시하겠습니다.

다음 명령을 실행합니다.
SELECT *
FROM tb1
WHERE NOT EXISTS
(SELECT * FROM tb WHERE tb.number=tb1.number);


실행 결과를 통해 매출이 없는 사원은 사원번호 A105, 나이가 35세인 박문수라는 것을 확인했습니다.



5.9 순위 정하기 2
표를 계산할 수 있는 소프트웨어라면 순위를 정하는 것은 간단합니다. 그러나 RDMBS에서 순위를 입력하는 것은 꽤 복잡한 처리라고 설명한 바 있습니다.

그런데 하위 질의를 사용하면 다양한 방법으로 순위를 매길 수 있습니다. 게다가, 셀프 조인보다 쉽게 처리할 수 있습니다. 이번에는 하위 질의를 사용해서 순위를 정하는 방법을 한 가지 소개하겠습니다.

매출정보 테이블 tb를 이용하여 매출 순위를 정해 보겠습니다. 이번에는 다른 테이블을 준비해서 칼럼에 순위를 입력해 보겠습니다. 조금 복잡하긴 하지만 차근차근 따라 해보기 바랍니다. 다음과 같은 순서로 진행하겠습니다.

연속 번호 기능을 설정한 테이블에 sales의 순서대로 정렬한 레코드를 삽입한다.
⬇︎
자동으로 입력되는 연속 번호가 순위가 된다.

구체적으로는 다음과 같은 처리를 합니다.

테이블 tb와 같은 구조의 테이블 tb_rank를 생성한다.
⬇︎
테이블 tb_rank에 연속 번호 기능을 설정한 칼럼 rank를 추가한다.
⬇︎
테이블 tb를 대상으로 sales의 순서대로 SELECT하는 하위 질의를 실행한다.
⬇︎
하위 질의의 결과를 테이블 tb_rank에 INSERT한다.

자, 그럼 순위를 입력하는 질의는 구체적으로 어떻게 작성하면 될까요? 연속 번호 기능과 하위 질의를 사용하는 방법을 다시 한번 떠올려 보기 바랍니다.

테이블 tb의 칼럼의 number와 sales, month로 구성되어 있습니다. 여기에 칼럼 rank를 추가한 테이블 tb_rank를 만들고, 테이블 tb의 레코드를 복사합니다. 그러고 나서 칼ㄹ럼 rank에 sales의 순위를 입력해 보겠습니다.


① 다음 명령을 실행합니다.
CREATE TABLE tb_rank LIKE tb;



② 다음 명령을 실행합니다.
ALTER TABLE tb_rank ADD rank INT AUTO_INCREMENT PRIMARY KEY;



③ 다음 명령을 실행합니다.
INSERT INTO tb_rank
(number, sales, month)
(SELECT
number, sales, month
FROM tb
ORDER BY sales DESC);



앞의 ① ~ ③은 각각 다음과 같은 처리를 합니다.

① 테이블 tb의 칼럼 구조만 복사해서 테이블 tb_rank를 생성한다.
② 테이블 tb_rank에 연속 번호 기능을 설정한 칼럼 rank를 추가한다.
③ 하위 질의를 사용해서 테이블 tb를 칼럼 sales의 내림차순으로 정렬하고, number와 sales, month를 테이블 tb_rank에 추가한다.

③에서 칼럼 rank 에 연속 번호가 자동으로 입력되는데 이 번호가 순위가 됩니다.

다음 명령을 실행합니다.
SELECT * FROM tb_rank;




체크!
★ UNION을 사용해서 여러 개의 테이블로부터 데이터를 SELECT할 수 있다.
★ 키를 지정해서 내부 조인을 한 여러 개의 테이블로부터 데이터를 SELECT할 수 있다.
★ LEFT JOIN이나 RIGHT JOIN을 사용해서 여러 개의 테이블로부터 필요한 데이터를 SELECT 할 수 있다.
★ 하위 질의의 의미를 이해하고 있다.
★ 하위 질의로 얻은 값을 조건으로 원하는 데이터를 추출할 수 있다.


출처: https://recoveryman.tistory.com/179 [회복맨 블로그]


2019년 10월 30일 수요일

mssql 사용자 비밀번호 변경하는법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sp_password @old = null, @new = '1234', @loginame = 'sa'
 
go
 
 
 
 
 
해당 프로시저를 사용하면됨
 
 
 
 
 
그리고 해당 데이터베이스에서
 
오른쪽 마우스->속성-보안-서버인증에서-SQL Server 및 Windows 인증모드를 꼭 체크해줘야한다
 
 
 
 
cs

2019년 10월 29일 화요일

Server failed to listen on 192.168.25.33 1433. Error: 0x2741. To proceed, notify your system administrator.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Server failed to listen on 192.168.25.33 <ipv4> 1433. Error: 0x2741. To proceed, notify your system administrator.
 
 
 
 
 
오류::
 
sql server를 실행하면
 
요청이 실패했거나 서비스가 시기 적절하게 응답하지 않았습니다.
 
 
 
 
 
해결::
 
ip 192.168.25.33 에 대한 1433의 포트가 열려있지않아서 그런것임
 
 
 
방화벽에서 인바운드 규칙 1433 을 추가해주자
cs

sql server 구성관리자(configuration Manager)가 어플리케이션에 보이지않아서 열 수 없을때!

일단 공식 사이트에는 이런식으로 설명이 되어있다.

 참고
SQL Server 구성 관리자는 독립 실행형 프로그램이 아니라 Microsoft Management Console 프로그램용 스냅인이므로 SQL Server 구성 관리자는 최신 버전의 Windows에서 애플리케이션으로 표시되지 않습니다.
  • Windows 10:
    SQL Server 구성 관리자를 열려면 시작 페이지에 SQLServerManager13.msc를 입력합니다( SQL Server 2016(13.x)의 경우). SQL Server 이전 버전의 경우 13을 더 작은 수로 바꿉니다. SQLServerManager13.msc를 클릭하면 구성 관리자가 열립니다. 구성 관리자를 시작 페이지나 작업 표시줄에 고정하려면 SQLServerManager13.msc를 마우스 오른쪽 단추로 클릭한 다음 파일 위치 열기를 클릭합니다. Windows 파일 탐색기에서 SQLServerManager13.msc를 마우스 오른쪽 단추로 클릭하고 시작 화면에 고정 또는 작업 표시줄에 고정을 클릭합니다.
  • Windows 8:
    SQL Server 구성 관리자를 열려면 검색 참의 에 SQLServerManager<version>.msc(예: SQLServerManager13.msc)를 입력한 다음 Enter 키를 누릅니다.



간단하게 everything 켜서 sqlservermanager라고 검색하면 알맞는 버전의 msc파일이 나온다
그러면 실행하면 된다!

2019년 9월 26일 목요일

MSSQL INNER JOIN

select
A.*,
B.SLAB_T_TGT,
C.T_NSKD_AVG,C.T_SKID_AVG
from TBL_FUR_ZONE_OPT A
left join TBL_FUR_SLAB_INF B
on A.FCE_NO = B.FCE_NO
inner join TBL_FUR_SLAB_HIS C
on A.FCE_NO = c.FCE_NO
where A.FCE_NO = 1

이런식으로 원하는 항목만 쿼리 가능


select
A.SLAB_THK AS THK,
A.SLAB_WTH AS WTH,
A.SLAB_LTH AS LTH,
B.ELEC_PREDICT_VALUE AS EF_VALUE,
B.ELEC_PRICE AS EP_PRICE,
B.ELEC_PREDICTED_COST AS EP_COST
from Production_Schdule_Final A
Inner join production_Shedule_Predict B
on A.MTL_NO = B.MTL_NO
where B.RL_ROLL_UT_NM = {0}
order by B.CHARGE_START_DT asc

git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...