2013. 2. 21. 03:52

출처: http://blog.daum.net/kkyagami/22

이 개념만 가지고 있으면 ... 문제 없을 듯.. Join에 대하여

이 아래 내용은 나중에 다시 정리해야겠다.


----------------- 참고 용 ===================

Mysql DB를 다룰 때 초보 수준에서 약간 중급으로 넘어가면서
흔히들 많이 어려워 하는 것이 Join 구문입니다.

먼저, 아래와 같은 테이블 두개가 있다고 합시다.
mysql> select * from demo_people;
+————+————–+——+
| name | phone | pid |
+————+————–+——+
| Mr Brown | 01225 708225 | 1 |
| Miss Smith | 01225 899360 | 2 |
| Mr Pullen | 01380 724040 | 3 |
+————+————–+——+

mysql> select * from demo_property;
+——+——+———————-+
| pid | spid | selling |
+——+——+———————-+
| 1 | 1 | Old House Farm |
| 3 | 2 | The Willows |
| 3 | 3 | Tall Trees |
| 3 | 4 | The Melksham Florist |
| 4 | 5 | Dun Roamin |
+——+——+———————-+

두 테이블은 pid 칼럼으로 엮여 있습니다.

먼저 두 테이블을 pid가 같은 것을 조건으로 일반적인 Join을 걸면
결과는 아래와 같습니다.

mysql> select name, phone, selling
from demo_people join demo_property
on demo_people.pid = demo_property.pid;

+———–+————–+———————-+
| name | phone | selling |
+———–+————–+———————-+
| Mr Brown | 01225 708225 | Old House Farm |
| Mr Pullen | 01380 724040 | The Willows |
| Mr Pullen | 01380 724040 | Tall Trees |
| Mr Pullen | 01380 724040 | The Melksham Florist |
+———–+————–+———————-+

pid가 같은 조건이 있는 줄은 두 테이블 모두에서 모조리 나오게 됩니다.
어느테이블이 기준이랄 것이 없이 양쪽에서 줄들이 추가되는
형국이죠. 이 때 서로 같은 것이 존재하지 않는 줄은 아예 출력이
되지 않습니다.

반면, Left 혹은 right join은 기준 테이블, 즉 반드시 출력되는
테이블을 잡아 줍니다.
위의 SQL 구문에서 Left Join을 걸어 보면 아래와 같은 결과가 나옵니다.

mysql> select name, phone, selling
from demo_people left join demo_property
on demo_people.pid = demo_property.pid;
+————+————–+———————-+
| name | phone | selling |
+————+————–+———————-+
| Mr Brown | 01225 708225 | Old House Farm |
| Miss Smith | 01225 899360 | NULL |
| Mr Pullen | 01380 724040 | The Willows |
| Mr Pullen | 01380 724040 | Tall Trees |
| Mr Pullen | 01380 724040 | The Melksham Florist |
+————+————–+———————-+

이 때 Left Join이기 때문에 왼쪽 테이블이 기준이 됩니다.
따라서, 왼쪽 테이블의 모든 Row가 결과값에 반드시 한줄 이상
나오는 보장을 받게 됩니다. 왼쪽 테이블(demo_people)에 해당하는
오른쪽 테이블의 pid가 여러개일경우 위와 같이 여러줄이 나옵니다.

반면, right join은 left join과 반대로 기준이 오른쪽 테이블입니다.
오른쪽 테이블은 반드시 한줄 이상 나오는 보장을 받게 되는 것이죠.
결과 값을 한번 보시죠.

mysql> select name, phone, selling
from demo_people right join demo_property
on demo_people.pid = demo_property.pid;

+———–+————–+———————-+
| name | phone | selling |
+———–+————–+———————-+
| Mr Brown | 01225 708225 | Old House Farm |
| Mr Pullen | 01380 724040 | The Willows |
| Mr Pullen | 01380 724040 | Tall Trees |
| Mr Pullen | 01380 724040 | The Melksham Florist |
| NULL | NULL | Dun Roamin |
+———–+————–+———————-+

왼쪽 테이블(demo_people)에 해당 pid 값이 같은 줄이 없어도,
오른쪽 테이블(demo_property)이 모두 나와야 하기 때문에,
null, null 값이 출력되게 된 것입니다.

INNER JOIN은 JOIN과 같고,
LEFT OUTER JOIN은 LEFT JOIN과 같고,
RIGHT OUTER JOIN은 RIGHT OUTER JOIN과 같습니다.

Posted by 노을지기

속도는 느리지만, 가끔 필요한 소스이다.

다른 방법이 있으면 알려주세요!!

CASE @TestVal
WHEN 1 THEN

            CASE @TestVal2
            WHEN 1 THEN 'First'
            ELSE
@TestVal2 END

WHEN 2 THEN 'Second'
WHEN 3 THEN 'Third'
ELSE 'Other'
END


일을 하다보니, 가끔 내부적으로 특정 데이터만 다시 뽑길 원해서 사용한다..ㅠㅠ

야매인듯..


CASE expressions can be used in SQL anywhere an expression can be used. Example of where CASE expressions can be used include in the SELECT list, WHERE clauses, HAVING clauses, IN lists, DELETE and UPDATE statements, and inside of built-in functions.

Two basic formulations for CASE expression
1) Simple CASE expressions
A simple CASE expression checks one expression against multiple values. Within a SELECT statement, a simple CASE expression allows only an equality check; no other comparisons are made. A simple CASE expression operates by comparing the first expression to the expression in each WHEN clause for equivalency. If these expressions are equivalent, the expression in the THEN clause will be returned.

Syntax:
CASE expression
WHEN expression1 THEN expression1
[[WHEN expression2 THEN expression2] [...]]
[ELSE expressionN]
END

Example:
DECLARE @TestVal INT
SET
@TestVal = 3
SELECT
CASE @TestVal
WHEN 1 THEN 'First'
WHEN 2 THEN 'Second'
WHEN 3 THEN 'Third'
ELSE 'Other'
END


2) Searched CASE expressions

A searched CASE expression allows comparison operators, and the use of AND and/or OR between each Boolean expression. The simple CASE expression checks only for equivalent values and can not contain Boolean expressions. The basic syntax for a searched CASE expressions is shown below:

Syntax:
CASE
WHEN Boolean_expression1 THEN expression1
[[WHEN Boolean_expression2 THEN expression2] [...]]
[ELSE expressionN]
END

Example:
DECLARE @TestVal INT
SET
@TestVal = 5
SELECT
CASE
WHEN @TestVal <=3 THEN 'Top 3'
ELSE 'Other'
END

Reference : Pinal Dave (http://blog.SQLAuthority.com)

Posted by 노을지기

출처: http://www.c-sharpcorner.com/uploadfile/hrojasara/export-gridview-data-in-csv-format/

아주 좋은 것을 구글에서 찾았다.
아주 쉽게 csv 파일로 저장되게 되어 있어서 문제가 발생하지 않았다.

다른 소스들은 datagridview가 여러 페이지로 되어 있으면 중간에 에러가 발생했는데,
이것은 그냥 첫 페이지(보이는 페이지)만 저장하였다.

이것은 내부적으로 다시 쿼리를 넣어서 처리하면 되니 크게 문제되지 않는다.

잘 사용해보시길... 많은 도움이 된 소스이다.

Thank you


Screenshot:

1.gif 

Output:

2.gif 

Code and explanation:

// on generate csv button click
protected void Button1_Click2(object sender, EventArgs e)
{
    // create one file gridview.csv in writing mode using streamwriter
    StreamWriter sw = new StreamWriter("c:\\gridview.csv");
    // now add the gridview header in csv file suffix with "," delimeter except last one
    for (int i = 0; i < GridView1.Columns.Count; i++)
    {
        sw.Write(GridView1.Columns[i].HeaderText);
        if (i != GridView1.Columns.Count)
        {
            sw.Write(",");
        }           
    }
    // add new line
    sw.Write(sw.NewLine);
    // iterate through all the rows within the gridview
    foreach (GridViewRow dr in GridView1.Rows)
    {
        // iterate through all colums of specific row
        for (int i = 0; i < GridView1.Columns.Count; i++)
        {
            // write particular cell to csv file
            sw.Write(dr.Cells[i].Text);
            if (i != GridView1.Columns.Count)
            {
                sw.Write(",");
            }
        }
        // write new line
        sw.Write(sw.NewLine);
    }
    // flush from the buffers.
    sw.Flush();
    // closes the file
    sw.Close();
}

Hope you understand it...

Thank you.

Posted by 노을지기

엑셀 사용중에 스타일(서식)이 너무 많은 오류가 발생하였다.

스타일이 적용이 안되어서 문제였는데..

스타일을 모두 초기화하는 방법이 다음과 같다.


1. xlsx 파일을 확장자를 직접 zip 확장자로 변경한다. (파일이름.xlsx -> 파일이름.zip)

만일 xls 파일이면 파일을 오픈한 후 xlsx로 저장하여 작업한다.

2. Zip 파일을 더블 클릭하여 연다.

3. [xl] 폴더에 있는 [styles.xml]파일을 삭제한다.

4. 현재 열려 있는 창을 닫은 후 파일이름.zip을 파일이름.xlsx로 변경한다.

5. 파일을 열면 복구 및 오류 창이 나타나는데 확인 또는 닫기 버튼을 누른다.

6. 파일을 다른 이름으로 저장한다.


아래에 있는 내용을 다시 정리한 것입니다.

이것대문에 고생했는데.. 다시 한 번 감사합니다..



출처: http://blog.naver.com/PostView.nhn?blogId=zzizzix21&logNo=30107341954


[문의 내용]

windows update 이 후 excel 2007에서 제공하는 서식을 사용한 xls은 모두 손상되어 표시되는 문제가 발생하며 시스템 복원 후 이전 시점으로 되돌아 갈 경우 문제가 발생하지 않는다.

 

[원인]

Excel 파일에 적용되어 있는 셀 스타일이 손상되어 파일에 문제가 있을 수 있습니다. 현재는 파일을 열거나 편집할 때 문제가 발생하지 않지만 추후 파일이 크게 손상되어 열 수 없는 경우가 발생될 수 있기 때문에 이러한 부분을 미연에 방지하고자 2011-4-12에 배포된 excel 관련 보안 업데이트 kb2464583를 설치할 경우 이미 손상된 셀 스타일을 모두 삭제한 상태로 파일이 열리게 되는 것으로 추정됩니다.

 

kb2464583 update 관련 문서를 참고합니다.

http://www.microsoft.com/korea/technet/security/bulletin/ms10-080.mspx

 

 

[해결 방법]

kb2464583를 설치하면 이와 같이 손상된 셀 스타일이 포함된 파일이 셀 스타일 삭제가 된 상태로 열릴 수 있기 때문에 손상된 셀 스타일이 포함된 excel파일을 모두 복구 한 후update를 진행하도록 합니다.

현재는 windows update를 사용하지 않음으로 하여 update를 차단한 상태이며 문제가 있을 수 있는 파일은 모두 점검하여 복구 후 update를 하시기 바랍니다.

  

복구 작업을 할 경우 원본 파일에는 문제가 없도록 반드시 복사된 파일을 이용하여 복구합니다.

  

복구 방법은 2가지 이며 이 방법 중 원하시는 방법을 적용하시기 바랍니다. 각각의 방법은 복구 후 문제가 발생할 수 있는 가능성에 차이가 있습니다.

  

방법1.(추천)

이 방법의 경우 손상된 셀 스타일을 모두 삭제하는 방법이기 때문에 복구 후 문제가 다시 발생할 가능성이 적습니다. 대신 스타일 파일 자체를 제거하기 때문에 일부 적용된 스타일이 변경될 수 있어 복구 후 다시 스타일 일부를 적용해야 할 수 있습니다. 단 이 작업의 경우 파일 확장자가 xlsx일 경우에만 가능합니다. 만약 xls 확장자일 경우 다른 이름으로 저장하여 xlsx로 변경 후 진행합니다.

 

1.      xlsx파일 확장자를 수동으로 직접 [test.xlsx]를 [test.zip]와 같이 zip파일 확장자로 변경합니다.

2.     Zip을 더블 클릭하여 열기를 합니다.

3.     [xl]폴더에 있는 [styles.xml]파일을 삭제합니다.

4.     다시 확장자를 [xlsx]로 변경합니다.

5.     파일을 더블 클릭하여 열기합니다. 복구 및 오류 창이 나타나면 확인 또는 닫기 버튼을 눌러 excel파일을 열기합니다.

6.     파일을 다른 이름으로 저장합니다.

7.     저장 후 excel 파일 사용시 문제가 없는지 확인 합니다.

 

 방법2.

이 방법의 경우 손상된 셀 스타일을 VBA로 삭제하는 방법입니다. 일부 손상이 심각하게 진행된 스타일은 삭제가 되지 않을 수 있기 때문에 복구 후 문제가 발생할 소지가 남습니다. 단 스타일만 삭제하는 방법이기 때문에 복구 후 특별히 편집할 필요는 없습니다.

1.     문제가 되는 excel 파일을 열기 합니다.

2.     키보드의 [Alt + F11]을 눌러 VB창을 열기합니다.

3.     [삽입 – 모듈]을 클릭합니다.

4.     아래 붉은색 텍스트를 모두 복사하여 모듈 창에 붙여 넣기 합니다.

Sub RebuildDefaultStyles()

 

'The purpose of this macro is to remove all styles in the active

'workbook and rebuild the default styles. "Normal" cannot be

'deleted. Therefore the macro does not attempt to delete it.

'It rebuilds the default styles by merging them from a new workbook.

 

    'Dimension variables.

    Dim MyBook As Workbook

    Dim tempBook As Workbook

    Dim CurStyle As Style

   

    On Error Resume Next    '//오류가 발생하도 무시하고 계속 진행

   

    'Set MyBook to the active workbook.

    Set MyBook = ActiveWorkbook

   

    'Delete all the styles in the workbook.

    For Each CurStyle In ActiveWorkbook.Styles

        If Not (CurStyle.BuiltIn) Then CurStyle.Delete  '//기본 스타일이 아닐 경우에만 삭제

    Next CurStyle

 

    'Open a new workbook.

    Set tempBook = Workbooks.Add

   

    'Disable alerts so you may merge changes to the Normal style

    'from the new workbook.

    Application.DisplayAlerts = False

   

    'Merge styles from the new workbook into the existing workbook.

    MyBook.Styles.Merge Workbook:=tempBook

   

    'Enable alerts.

    Application.DisplayAlerts = True

   

    'Close the new workbook.

    tempBook.Close

 

End Sub

5.     붙여 넣기가 끝나면 F5번키를 한번 누릅니다.

6.     실행이 끝나면 프로젝트 탐색기 창에서 [모듈]을 클릭하고 마우스 오른쪽을 누릅니다.

7.     모듈 삭제를 클릭합니다. (내보내기를 하지 않고 삭제합니다.)진행이 끝났다면 VB창을 닫습니다.

8.     Excel 파일을 다른 이름으로 저장하여 다시 열기 합니다.

9.     일부 삭제가 되지 않았던 스타일은 직접 수동으로 제거합니다.

10.   파일 사용시 문제가 되는지 확인합니다.

 

팁 : 셀스타일 삭제 후 파일의 셀서식(선 등)이 모두 삭제 되므로 서석을 다시 작성해야 하는 번거로움이 있습니다. 이런 경우 엑셀2007의 서식복사를 하여 각 시트마다 붙여넣기를 하면 됩니다. 서식복사의 경우 모두선택 -> 서식복사를 하여 수정한 파일의 해당 시트에 그대로 모두선택를 클릭하면 서식복사가 완료됩니다.


 




[추가 정보]

셀 서식이 너무 많습니다."라는 오류가 발생하면서 파일이 열리지 않는다

http://support.microsoft.com/default.aspx?scid=kb;ko;601085


Excel 2002 및 Excel 2003의 손상된 통합 문서에서 데이터를 복구하는 방법

http://support.microsoft.com/kb/820741/ko


Excel에서 파일 손상을 방지하는 방법

http://support.microsoft.com/kb/149235/ko

특정 파일이 열리지 않는 원인의 경우 다음과 같은 상황에서 발생할 수 있습니다.


-컴퓨터를 다시 시작하거나 종료하기 전에 Windows를 종료합니다.

-라디오, 팩스, 기계, 텔레비전, 스테레오, 스피커 등의 전자파 방출 기기를 컴퓨터에서 떨어진 곳으로 옮깁니다.

-컴퓨터 모니터 위에 플로피 디스크를 두지 않습니다. 컴퓨터 모니터에서 전자파가 방출됩니다.

-바이러스가 있는지 컴퓨터를 정기적으로 검색합니다.

-디스크에 먼지가 쌓이지 않도록 디스크가 들어 있던 상자와 같은 디스크 저장함에 플로피 디스크를 보관합니다.

-컴퓨터 주위에 먼지가 쌓이지 않도록 합니다.

-web으로 파일을 등록할 경우 네트워크에 문제가 발생하면 손상되어 등록되거나 받기 시 문제가 될 수 있습니다.

-위와 같이 손상된 excel 파일의 내용을 복사하여 사용하는 문서에 붙여 넣기 했을 경우 문제가 될 수 있습니다.

Posted by 노을지기

ASP.NET(C#) 에서 크리스탈 리포트를 게시하였다.

모든 구글에서 데이터베이스에서 바로 불려오는 것의 예제가 있어서 거의 생략하고...

DataSet 베이스로 재 프로그래밍하였다.

비쥬얼 스튜디오 2008에서 빌드하면 이상없이 배포가 되는데..

이것을 IIS (Windows XP SP3)에 배포한 후에 익스플로워에서 볼 경우 Crystal Reports의 상단의 이미지가 깨져서 보였다. (ASP.NET Crystal Reports image field not showing)

구글에서 이것 저것 검색하다가 CrystalImageHandler에 닷넷의 버전이 있었다.

또한 이미지의 링크를 보니 aspnet_client 밑의 폴더로 되어 있었다.


그래서 IIS 설정 폴더를 보니.. 역시나 system_web 폴더 밑에 2.0 폴더에는 Crystal Report 폴더가 있지만, 4.0 에는 없었다.


같은 폴더를 4.0에서도 복사하여 붙여주니 정상적으로 작동!!!


ASP.NET을 사용하면서 제일 어려운 것은 아마 배포하기가 아닌듯하다.

PHP에 익숙하다가 툴을 사용하려니...

프로그램하는 시각보다 셋업하고 설정하는데 더 오래 걸리는듯...

Windows 7에서도 이런 문제가 발생할지 모르겠다. 곧 컴터 업그레이드 계획인데..ㅠㅠ



Posted by 노을지기