SQLite查询有问题在连接

时间:2018-02-28 03:32:26

标签: sql-server sqlite

首先我的SQL非常生疏,我相信我需要在这里做一个小组,但每次尝试我都会收到错误

无法比较或排序text,ntext和image数据类型,除非使用IS NULL或LIKE运算符

我有以下表格

Transactions
TransId | AccountId | PayeeId | TransAmount | CatId | SubCatId | TransDate
1       | 1         | 1       | 100.00      | 2     | 1        | 01/02/2018
2       | 1         | -1      | 50.00       | 3     | -1       | 01/02/2018
3       | 2         | 2       | 150.00      | 4     | 5        | 03/02/2018

Payee
PayeeId | PayeeName   
1       | Employer 1
2       | Woolworths 

Category
CatId   | CatName
1        | Bills
2        | Income  
3        | Transfer
4        | Groceries        

SubCategory
SubCatId | SubCategoryName | CatId
1        | Salary          | 2
2        | Rent            | 1
3        | Taxes           | 1
4        | Interest        | 2
5        | Food            | 4

到目前为止我的SQL是

SELECT TransId, Transdate, PayeeName, TransAmount
FROM  Transactions AS t
left JOIN Payee AS p ON t.PayeeId  = p.PayeeId 
join Category as c on c.CATEGID = t.CATEGID
WHERE 
    t.AccountId  = 1
order by Date Desc

在大多数情况下,他的实际工作,除非我尝试连接下面的两个字符串(SQLite)代码(我有问题让Concat在MSSQL Express中工作)

CATEGNAME || “:”|| SubCat.SUBCATEGNAME为Category

SELECT TransId, Transdate, PayeeName, TransAmount,
       CatName || " : " || SubCategoryName as Category
FROM  Transactions AS t
left JOIN Payee AS p ON t.PayeeId  = p.PayeeId 
join Category as c on c.CATEGID = t.CATEGID
join SubCategory as sc on sc.CATEGID = c.CATEGID
WHERE 
    t.AccountId  = 1
order by Date Desc

该查询返回每个SubCategory的记录,我相信我需要在查询中使用group by。问题在于每次我尝试时,我都会收到上面提到的错误。

所以有两个问题,需要做些什么才能让它返回数据而不为每个子类别添加额外的行,以及concat如何在MS SQL中工作以实现我的需要。因为Concat似乎在列上工作,所以在两者之间加上“:”并不会和我一起玩。

任何帮助或方向都会很棒。

修改

我现在有点工作了。

SELECT TransId, Transdate, PayeeName, TransAmount,
       CatName || " : " || SubCategoryName as Category
FROM  Transactions AS t
left JOIN Payee AS p ON t.PayeeId  = p.PayeeId 
left join Category as c on c.CATEGID = t.CATEGID
left join SubCategory as sc on sc.CATEGID = t.CATEGID
WHERE 
    t.AccountId  = 1
order by Date Desc

除了MS SQLite有一个问题,而不是类别为nu​​ll,concat执行此操作

   Bill :

SQLite本身返回预期的null,是

concat(CATEGNAME , ' : ' , SUBCATEGNAME)

在MSSQLite中执行此操作的正确方法?

编辑2:

预期结果

TransId | Transdate  | PayeeName  | TransAmount | Category
----------------------------------------------------------
1       | 01/02/2018 | Employer 1 | 100         | Income : Salary

现在CatId可以为null,SubCatId也可以为

因此,如果CatId为null,则Category应为null

如果Sub Cat为null,则Category应为“Income”

如果两者都有值,则Category应该与返回的上述记录显示相同。我希望这是有道理的。

编辑3:

好好玩了一下后,我设法让它在SQLite中工作,并在查询中添加了以下代码

            CASE WHEN SUBCATEGNAME IS NULL then CATEGNAME else 
            CASE WHEN CATEGNAME IS NULL then '' else CATEGNAME || ' : ' || SUBCATEGNAME END
            end as Category,

在MS SQlite中,我能够使用以下代码来实现它。

           CASE WHEN SUBCATEGNAME IS NULL then CATEGNAME else 
               CASE WHEN CATEGNAME IS NULL then '' else concat(CATEGNAME, ' : ', SUBCATEGNAME) END
           end as Category,

现在我想,这有效,但我希望有更多的跨数据库解决方案。目前我正在使用MS SQLite,但我不确定我是否会坚持使用它。或者,将该查询转换为实体框架会更好吗?

0 个答案:

没有答案