2009-12-08 2 views
5

두 하위 쿼리에서 테이블을 만드는 쿼리가 MS Access에 있습니다. 생성되는 두 개의 열에 대해서는 첫 번째 하위 쿼리의 한 열을 두 번째 하위 쿼리의 열로 나눕니다.MS Access에서 데이터 형식을 강제로 테이블 쿼리를 만듭니다

첫 번째 열의 데이터 유형은 double입니다. 두 번째 열의 데이터 형식은 소수점 2 자이며 소수점 두 번째 열을 double로 지정합니다.

표준 메이크 테이블 액세스 쿼리를 통해 테이블을 만들 때 데이터 형식을 강제로 사용할 수 있습니까?

+0

SQL 문을 게시 할 수 있습니까? 원래 진술은 우리가 대답하는 방식에 영향을 미칠 것입니다. – Rap

답변

8

테이블을 만들기 전에 명시 적으로 테이블을 만드는 것이 한 가지 방법입니다.

SELECT Persons.LastName,Orders.OrderNo 
INTO Persons_Order_Backup 
FROM Persons 
INNER JOIN Orders 
ON Persons.P_Id=Orders.P_Id 
WHERE FirstName = 'Alistair' 

하지만 당신은이 작업을 수행 할 수 있습니다 :

현재 문은 다음과 아마

----Create NewTable 
CREATE TABLE NewTable(FirstName VARCHAR(100), LastName VARCHAR(100), Total DOUBLE) 
----INSERT INTO NewTableusing SELECT 
INSERT INTO NewTable(FirstName, LastName, Total) 
SELECT FirstName, LastName, 
FROM Person p 
INNER JOIN Orders o 
ON p.P_Id = o.P_Id 
WHERE p.FirstName = 'Alistair' 

이 방법을 사용하면 열 유형을 완벽하게 제어 할 수 있습니다. 테이블을 다시 작성해야 할 경우 언제든지 나중에 테이블을 h 제할 수 있습니다.

+3

MakeTable을 실행 한 후 데이터 유형을 변경하는 것 이외에는 그 방법 밖에 없다고 생각합니다. –

0

열 주위에 CDbl을 사용할 수 있습니다.

+0

CDbl()이 널 (Null)을 처리하지 못하기 때문에 @onedayone이 올바르지 않으므로 제안 할 때 처리해야합니다. –

+0

그러면 iif뿐만 아니라 NZ도 사용할 수 있습니다. 따라서 CDbl (NZ (ColVal, 0))을 사용하십시오. –

+1

Nz()는 IIF (.. IS NULL ..) 구문보다 열등합니다. Access UI 외부에서 사용할 경우 구문 오류가 발생합니다. 또한 Nz()가 SQL 코드에서 결과를 텍스트로 강제 변환하기 때문에 데이터 유형이 이상해집니다. 더 자세한 내용은 http://allenbrowne.com/QueryPerfIssue.html을 참조하십시오.그러나이 경우 CDBL() 함수에서 '단지'를 래핑하면 성능 문제가 발생합니다. – onedaywhen

3

FLOAT 함수는 CDBL()으로 캐스트 할 수 있지만 다소 기괴하게 Access 데이터베이스 엔진은 NULL 값을 처리 할 수 ​​없으므로 직접 처리해야합니다.

SELECT first_column, 
     IIF(second_column IS NULL, NULL, CDBL(second_column)) 
      AS second_column_as_float 
    INTO Table666 
    FROM MyTest; 

은 ...하지만 당신은 더 나은 단순히 CREATE TABLE 먼저 그것을 채울 INSERT INTO..SELECT을 사용하는 등 사용자의 키, 제약 조건을 추가 할 ALTER TABLE에 필요 해요.

0

쉬운 방법은 올바른 필드 형식과 추가 - 쿼리에 빈 테이블을 만드는 것입니다. 그러면 Access에서 자동으로 데이터를 대상 필드로 변환합니다.

0

비슷한 상황이 있었지만 간단한 텍스트가 되길 원했던 숫자 데이터 형식의 필드를 만드는 테이블 만들기 쿼리가있었습니다.

내가 한 것은 (그리고 Stack에서 아이디어를 얻었습니다.) 문제의 필드를 Short Text로 작성하고 동시에 레코드를 삭제하기 위해 삭제 쿼리를 작성하는 것입니다. 나는 그것의 재미있는 DELETE 쿼리가 테이블을 삭제하지 않는다고 생각합니다. 테이블에있는 레코드 만 삭제하면됩니다. 테이블을 제거하기 위해 DROP TABLE 함수를 사용해야한다고 생각합니다 ...

그런 다음 내 make-table 쿼리를 APPEND 쿼리로 변환했는데, 전에는 해본 적이 없었습니다 ... 그리고 방금 DELETE 쿼리를 내 프로세스에 추가했습니다.

감사합니다. 스택 오버플로!

스티브

관련 문제