2014-10-06 44 views
3

编辑使用连字符:已经使用SQLiteBrowser作为一个IDE \工具SQLite的 - 在列别名

的SQLite不是频繁使用的用户 - 请原谅我的无知。 以下查询是较大查询的一部分;

SELECT DISTINCT T1.Material AS "Diameter", 
       T2.sLength AS "0-110mm", 
       T3.sLength AS "110-160mm", 
       T4.sLength AS "225-300mm", 
       T5.sLength AS "300-450mm", 
       T6.sLength AS "450-600mm", 
       T7.sLength AS "600mm-" 
FROM "mycte" T1 
     LEFT JOIN "mycte" T2 
       ON T1.Material = T2.Material 
       AND T2.Diameter = "0-110mm" 
     LEFT JOIN "mycte" T3 
       ON T1.Material = T3.Material 
       AND T3.Diameter = "110-160mm" 
     LEFT JOIN "mycte" T4 
       ON T1.Material = T4.Material 
       AND T4.Diameter = "225-300mm" 
     LEFT JOIN "mycte" T5 
       ON T1.Material = T5.Material 
       AND T5.Diameter = "300-450mm" 
     LEFT JOIN "mycte" T6 
       ON T1.Material = T6.Material 
       AND T6.Diameter = "450-600mm" 
     LEFT JOIN "mycte" T7 
       ON T1.Material = T7.Material 
       AND T7.Diameter = "600mm-" 
WHERE T1.Material <> '' 

虽然我在别名中使用带有单个连字符\的别名,但这些字段会返回空白。 如果我将别名“0-110mm”重命名为“0--110mm”,那么该列的字段会返回数据。 这似乎是一个单一的连字符\正在搞砸事情。

任何想法? 在此先感谢。

+0

哪种编程语言是您使用访问SQLite的? – 2014-10-06 19:47:16

+0

SQL - 使用SQLiteBrowser(允许CTE),但客户端在SQLiteStudio上(不允许CTE!)。要回答你的问题,我不是从应用程序代码调用。 – MarkD 2014-10-07 15:28:46

回答

0

最好我设法得出了它。只需要处理名称中的尾部空格。

SELECT DISTINCT 
    T1.Material AS "Diameter" 
    ,T2.sLength AS [0-110mm ] 
    ,T3.sLength AS [110-160mm ]   
    ,T4.sLength AS [160-225mm ] 
    ,T5.sLength AS [225-300mm ]  
    ,T6.sLength AS [300-450mm ]  
    ,T7.sLength AS [450-600mm ] 
    ,T8.sLength AS [600mm- ] 
FROM "MyCTE" T1 
LEFT 
JOIN "MyCTE" T2 ON T1.Material = T2.Material AND T2.Diameter = "0-110mm" 
LEFT 
JOIN "MyCTE" T3 ON T1.Material = T3.Material AND T3.Diameter = "110-160mm" 
LEFT 
JOIN "MyCTE" T4 ON T1.Material = T4.Material AND T4.Diameter = "160-225mm" 
LEFT 
JOIN "MyCTE" T5 ON T1.Material = T5.Material AND T5.Diameter = "225-300mm"  
LEFT 
JOIN "MyCTE" T6 ON T1.Material = T6.Material AND T6.Diameter = "300-450mm" 
LEFT 
JOIN "MyCTE" T7 ON T1.Material = T7.Material AND T7.Diameter = "450-600mm" 
LEFT 
JOIN "MyCTE" T8 ON T1.Material = T8.Material AND T8.Diameter = "600mm-" 
+0

马克,你正在使用哪种版本的SQLite?此外,我从早些时候收回我的答案! – Drew 2014-10-06 18:01:08

+0

我不确定如何确定SQLite的版本,但是当在记事本中打开数据库文件时,我会看到“SQLite格式3”作为文件的第一部分。 – MarkD 2014-10-07 15:25:48

-1

不要在别名中使用双引号或方括号。改用单引号。这可能会解决问题。有一天我有类似的问题,不一样但相似。

https://www.sqlite.org/lang_keywords.html

“关键字”单引号中的关键字是一个字符串文字。 “keyword”双引号中的关键字是一个标识符。 [关键字]方括号内的关键字是一个标识符。这不是标准的SQL。此引用机制由MS Access和SQL Server使用,并包含在SQLite中以实现兼容性。

0

我不知道你正在使用的SQLite的版本,但下面拨弄表明您最初的办法正常工作:

http://sqlfiddle.com/#!7/20222/1

CREATE TABLE test 
    ( 
    col1 VARCHAR(100) 
); 

INSERT INTO test 
      (col1) 
SELECT 'foo' 

SELECT col1 AS "col-1" 
FROM test 
+0

谢谢德鲁 - 我开始怀疑问题是不是因为我使用的工具\ IDE \浏览器。我使用SQLIteBrowser(它允许CTE),但客户端在SQLiteStudio(它不允许CTE!)。将看看别名问题是否仍然存在... – MarkD 2014-10-07 15:27:37

+0

@MarkD欢迎。并陷入困境。另外,它看起来好像SQLite一般支持CTE?另外,你是否试图通过命令行界面执行语句到sqlite? – Drew 2014-10-07 17:24:32

+0

另外,http://www.sqlite.org/lang_with.html! – Drew 2014-10-07 18:12:22