1

SQLで列の異なるデータ型をマージする方法は?

私はテーブルを持っています:

+-----------+-------------+
+ Column    + Data Type   +
+-----------+-------------+
+ Day       + Int         +
+ Time      + Varchar     +
+ Quota     + Int         +
+-----------+-------------+

そのテーブルのすべての列をマージしたいと思います。

私はこれを試しましたが、機能しません:

SELECT Day + ' - ' + Time + ' : ' + Quota AS [Description], COUNT(*) AS [Total] 
FROM table
GROUP BY Day + ' - ' + Time + ' : ' + Quota

エラーメッセージ:Data Conversion Failed. [ OLE DB status value (if known) = 2 ]

同じデータ型、つまり:DayQuota、のみをマージしようとすると、機能します。どうやってやるの?

4

4 に答える 4

4

VARCHARデータ型intの列は、文字列連結を実行するように、文字列データ型に変換または型キャストする必要があります。

SQL Fiddleでデモを表示するには、このリンクをクリックしてください。

スクリプト:SQLServer2012でテスト済み。

CREATE TABLE dbo.MyTable
(
    [Day] int NOT NULL
  , [Time] varchar NOT NULL
  , [Quota] int NOT NULL
);

INSERT INTO dbo.MyTable ([Day], [Time], [Quota]) VALUES
    (1, '2', 101),
    (1, '1', 101),
    (2, '3', 101),
    (2, '3', 101),
    (3, '4', 263);

SELECT  Description
    ,   COUNT(Description) AS DescriptionCount
FROM
(
    SELECT  CAST([Day] AS VARCHAR) 
            + ' - ' + Time 
            + ' : ' + CAST([Quota] AS VARCHAR) AS [Description] 
    FROM    dbo.MyTable
) T1
GROUP BY Description;

出力

DESCRIPTION DESCRIPTIONCOUNT
----------- ----------------
1 - 1 : 101        1
1 - 2 : 101        1
2 - 3 : 101        2
3 - 4 : 263        1

アップデート

クエリのSQLCompactEditionバージョン

SELECT      LTRIM(RTRIM(STR(Day)))  + ' - ' + 
            LTRIM(RTRIM(Time))      + ' : ' + 
            LTRIM(RTRIM(STR(Quota))) AS Description
        ,   COUNT(*) AS DescriptionCount
FROM        MyTable
GROUP BY    LTRIM(RTRIM(STR(Day)))  + ' - ' + 
            LTRIM(RTRIM(Time))      + ' : ' + 
            LTRIM(RTRIM(STR(Quota)))

出力

SQLCE出力

于 2012-04-29T02:36:47.160 に答える
3

これは私の答えとSivaの答えのマッシュアップであり、うまくいけば、質問者の問題を解決するでしょう:

SQLフィドルリンク

CREATE TABLE MyTable
(
    iDay int NOT NULL
  , sTime varchar(50) NOT NULL
  , iQuota int NOT NULL
);

INSERT INTO MyTable (iDay, sTime, iQuota) VALUES
    (1, '2', 101),
    (1, '1', 101),
    (2, '3', 101),
    (2, '3', 101),
    (3, '4', 263);

SELECT CAST(iDay AS VARCHAR) + ' - ' + sTime + ' : ' +
CAST(iQuota AS VARCHAR) AS Description
FROM MyTable
GROUP BY CAST(iDay AS VARCHAR) + ' - ' + sTime + ' : ' +
CAST(iQuota AS VARCHAR)
于 2012-04-29T03:08:10.130 に答える
1

(MySQLを想定)

文字列と整数の加算を実行しようとしています。+mysqlの連結演算子ではありません。表示されるエラーは、文字列を数値型に変換できなかったことを示しています。

これを試して:

SELECT concat(Day, ' - ', Time, ' : ', Quota) AS `[Description]`, COUNT(*) AS `[Total]`
FROM table
GROUP BY `[Description]`
于 2012-04-29T02:34:42.147 に答える
0

GROUP BYを実行するときは、フィールド名を入力するだけです。それで...

SELECT Day +'-' + Time +':' + Quota AS [Description]、COUNT(*)AS [Total]
FROM table GROUP BY Day、Time、Quota

それは動作しますか?

于 2012-04-29T02:27:33.823 に答える