Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL并排显示两个结果_Sql_Sqlite - Fatal编程技术网

SQL并排显示两个结果

SQL并排显示两个结果,sql,sqlite,Sql,Sqlite,我有两个表,正在对每个表进行有序选择。我想在一个结果中看到两个订单的结果 示例(简化): 我想将结果显示为两列,这样我就可以直观地感受到最频繁的访客是否也是最佳买家。(我知道这个例子是糟糕的数据库设计,不是真实的场景。这是一个例子) 我想得到这个: name by visits|name by spent --------------+------------- AA | AA BB | CC CC | BB 我正在使用SQLi

我有两个表,正在对每个表进行有序选择。我想在一个结果中看到两个订单的结果

示例(简化):

我想将结果显示为两列,这样我就可以直观地感受到最频繁的访客是否也是最佳买家。(我知道这个例子是糟糕的数据库设计,不是真实的场景。这是一个例子)

我想得到这个:

name by visits|name by spent
--------------+-------------
 AA           | AA
 BB           | CC
 CC           | BB

我正在使用SQLite。

只需将表1和表2以名称作为键连接起来,如下所示:

select a.name, 
   b.name, 
   a.NumOfVisitField, 
   b.TotalSpentField 
from table1 a
left join table2 b on a.name = b.name

对于支持公共表表达式和窗口函数(例如SQL Server、Oracle、PostreSQL)的RDBMS,我将使用:

WITH most_visited AS
(
  SELECT ROW_NUMBER() OVER (ORDER BY num_visits) AS num, name, num_visits
  FROM visits
),
most_spent AS
(
  SELECT ROW_NUMBER() OVER (ORDER BY amt_spent) AS num, name, amt_spent
  FROM spent
)
SELECT mv.name, ms.name
FROM most_visited mv INNER JOIN most_spent ms
ON mv.num = ms.num
ORDER BY mv.num
试试这个

select 
    ISNULL(ts.rn,tv.rn), 
    spent.name, 
    visits.name 
from 
(select *, (select count(*) rn from spent s where s.value>=spent.value ) rn from spent) ts  
    full outer join
(select *, (select count(*) rn from visits v where v.visits>=visits.visits ) rn from visits) tv     
    on ts.rn = tv.rn
order by ISNULL(ts.rn,tv.rn)

它为源表中的每个条目创建一个列组,并在其列组上联接这两个条目。如果存在重复的列组,他们将在结果中返回重复的列组。

我知道这不是一个直接的答案,但我正在搜索它,以防有人需要它:这是一个更简单的解决方案,当结果仅为每列一个时:

select 
   (select roleid from role where rolename='app.roles/anon') roleid, -- the name of the subselect will be the name of the column
   (select userid from users where username='pepe') userid;          -- same here
结果:

                 roleid                |                userid
 --------------------------------------+--------------------------------------
  31aa33c4-4e66-4da3-8525-42689e46e635 | 12ad8c95-fbef-4287-9834-7458a4b250ee

哪个数据库??SQL server?mysql?甲骨文?我不想让他们连名字都有。这将为我提供同一行中一个名称的结果,而我希望最好的买家和最好的访客在同一行中(即使名称不同),这将提供一个完整的交叉连接(上例中为9行),我将很快编辑它,以便使用RowId为您提供一个改进的答案。确定在订购每个表后使用RowId编辑。然后我使用内部连接使用该RowID连接表。仍然无法工作。rowid将是原始表的rowid,而不是已排序的临时表的rowid。如果先在临时表中进行选择,然后再进行主选择(3个步骤,但它可以工作),那么这将是可行的。这就是我最后所做的。在Oracle(我使用它工作)中,我对每个表使用双选择,因此RowId应该引用已排序的表。如果您仔细查看我的查询,它是3个步骤(即3个深度选择),如果它与RowNum(在oracle中)一起工作,我不明白为什么它在这里不工作。但我很高兴我还是提供了帮助。这可能不是这个特定问题的解决方案,但您的“从角色中选择角色ID”解决方案简化并回答了我的问题,尝试将三个Select语句与minmal编码并排放置……谢谢!
select 
   (select roleid from role where rolename='app.roles/anon') roleid, -- the name of the subselect will be the name of the column
   (select userid from users where username='pepe') userid;          -- same here
                 roleid                |                userid
 --------------------------------------+--------------------------------------
  31aa33c4-4e66-4da3-8525-42689e46e635 | 12ad8c95-fbef-4287-9834-7458a4b250ee