如何在Sqlite中将列值转换为行?

2023-11-29

我在 sqlite 中有一个表值,例如..

我在这样的 sqlite 查询中获得价值..

select * from tablename where id='101' and id='102' and id='1' and id='18'

101 Local Local Local   Local   Local   Local
102 9               12      9       12      9
  1 3:55    4:20    4:40    5:00    5:20    5:40
 18 4:50    5:15    5:35    5:55    6:15    6:35

以上值我需要在 sqlite 查询中进行转换,如下所示。

Local       9       3:55    4:50
Local       12      4:20    5:15
Local       9       4:40    5:35
Local       12      5:00    5:55
Local       9       5:20    6:15
Local       9       5:40    6:35

哦,所以你被困在一个糟糕的数据库设计中,你不允许改变......这很糟糕。它应该被分成 4 个表(至少)。无论如何,在这种特殊情况下,这是一种方法。

我假设第一个查询相当于:

SELECT id, F1, F2, F3, F4, F5, F6
FROM tablename
WHERE id IN (101,102,1,18)

所以,你可以像这样进行转置/旋转/任何实际调用的操作:

SELECT 
  MAX(CASE WHEN id=101 THEN F1 END) R1,
  MAX(CASE WHEN id=102 THEN F1 END) R2,
  MAX(CASE WHEN id=1 THEN F1 END) R3,
  MAX(CASE WHEN id=18 THEN F1 END) R4
FROM tablename
UNION
SELECT 
  MAX(CASE WHEN id=101 THEN F2 END) R1,
  MAX(CASE WHEN id=102 THEN F2 END) R2,
  MAX(CASE WHEN id=1 THEN F2 END) R3,
  MAX(CASE WHEN id=18 THEN F2 END) R4
FROM tablename
UNION
SELECT 
  MAX(CASE WHEN id=101 THEN F3 END) R1,
  MAX(CASE WHEN id=102 THEN F3 END) R2,
  MAX(CASE WHEN id=1 THEN F3 END) R3,
  MAX(CASE WHEN id=18 THEN F3 END) R4
FROM tablename
UNION
SELECT 
  MAX(CASE WHEN id=101 THEN F4 END) R1,
  MAX(CASE WHEN id=102 THEN F4 END) R2,
  MAX(CASE WHEN id=1 THEN F4 END) R3,
  MAX(CASE WHEN id=18 THEN F4 END) R4
FROM tablename
UNION
SELECT 
  MAX(CASE WHEN id=101 THEN F5 END) R1,
  MAX(CASE WHEN id=102 THEN F5 END) R2,
  MAX(CASE WHEN id=1 THEN F5 END) R3,
  MAX(CASE WHEN id=18 THEN F5 END) R4
FROM tablename
UNION
SELECT 
  MAX(CASE WHEN id=101 THEN F6 END) R1,
  MAX(CASE WHEN id=102 THEN F6 END) R2,
  MAX(CASE WHEN id=1 THEN F6 END) R3,
  MAX(CASE WHEN id=18 THEN F6 END) R4
FROM tablename

不幸的是,它以一种奇怪的方式排序。

我真的建议你说服负责人重新设计数据库。一些设计人员认为拥有这种结构的表是“灵活的”并且“提高了性能”,但事实并非如此:使用此类表进行实际工作需要非常重要的查询,而大多数 DBMS无法优化因为从来没有人指望他们会面对这样的暴行。

这样的表也打破了关系模型的理念。每个表必须有一个语句“模板”,例如,CREATE TABLE S (id INTEGER, name TEXT, address TEXT)可以有模板“具有 id ID 的供应商称为 NAME,位于 ADDRESS”。现在,该表中的每一行都会产生关于世界的真实陈述当您将其内容放入模板时:如果S将包含一行(1, "Bob & Co.", "Lime St., 125"),那么它会告诉您“ID 为 1 的供应商名为 Bob & Co.,位于 Lime St., 125”。

所有关系操作:选择、投影、连接、过滤等,不只是以特定方式组合表,不!它们还结合了“模板”,因此您可以说出查询为您提供的确切信息。反之亦然,如果你能通过组合这些“模板”来表达你想要什么信息,它几乎会自动给你一个相应的查询。

并且您必须使用的表可以与任何健全的“模板”相关联。这就是为什么你必须编写无意义的查询才能得到有用的东西。请注意,我基本上可以猜测结果集的“模板”,

R1      R2   R3     R4
============================
Local   9   3:55   4:50
...

这类似于“R2 类型的事件在地点 R1 发生,从时间 R3 开始并在时间 R4 结束”。我对么?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Sqlite中将列值转换为行? 的相关文章

  • 如何在 Xamarin.Forms 上使用 System.Data.SQLite Interop.dll?

    每次尝试运行移动应用程序时 我都会遇到以下问题 System DllNotFoundException SQLite Interop dll assembly
  • 从 sqlite 和 mysql 加载数据微调器

    我试试这个tutorial http nielpoenya blogspot com 2012 08 tutorial android spinner dari database html加载Spinner from sqlite and
  • Python Sqlite3 获取 Sqlite 连接路径

    给定一个 sqlite3 连接对象 如何检索 sqlite3 文件的文件路径 The Python 连接对象 http github com python cpython blob master Modules sqlite connect
  • 将自动递增值添加到只有一列的表中

    我需要创建一个基本上仅保留索引列表的表 因此 我创建了一个只有一个名为 id 的自动递增列的表 但是 我似乎无法隐式地将自动递增值添加到该表中 我知道通常当您在表中有这样一列 不仅仅是此列 时 您可以执行以下操作 插入表 col1 col2
  • SQLite 使用循环重新编号 ID

    您好 我有一个包含许多插入行的表 我需要按 id 对所有行重新编号并排序 我找到了这段代码 但它对我不起作用 SET i 100 UPDATE main Categories SET ID i i 1 WHERE Name White AL
  • 评估 SQLite 中的连续行对

    我的 SQLite 表中有数据 如下所示 user id event date 1000001 2008 01 01 1000001 2008 03 13 1000001 2008 07 04 1000002 2007 01 06 1000
  • Android中的SQLite是否有内存缓存以及如何释放或清除它?

    首先 我在 Android 应用程序中创建一个名为 mydb 的数据库 DBHelper dbHelper new DBHelper context mydb null 1 DBHelper is my custom class 并将一些数
  • Android SQLite 数据库从查询中删除重复项

    我是 SQLite 新手 我使用此查询是为了从特定用户的列中提取所有行 Cursor c db query true TABLE COLUMN USER user null null null null null 这是表格的示例 group
  • SQLite:*防止*主键值在删除所有行后重置[重复]

    这个问题在这里已经有答案了 我有一个 SQLite 表 有几列 包括一个 ID 列 它是 INTEGER PRIMARY KEY 当我插入时 该值会按预期增加 但是 当我删除所有行时 该列的值在下一次插入时恢复为 1 有没有办法让列值从删除
  • 仅将唯一行插入 SQLite (python)

    我在用着cursor executemany将 CSV 文件中的批量行插入到 SQLite 表中 根据主键字段 其中一些行预计会重复 当我执行该命令时 可以预见的是 我会收到完整性错误 并且不会插入任何内容 如何有选择地仅插入非重复行 而无
  • Wordnet sqlite 同义词和示例

    我正在尝试获取给定 wordid 的同义词和示例列表 经过大量的试验和错误 我可以获得所有同义词集的样本 但不是实际的同义词 这是我的查询 它给出了以下结果 select senses wordid senses synsetid sens
  • Rails 4 - 如何在开发中使用 sqlite3 以及在生产中使用 PostgreSQL 和 Heroku

    我正在尝试部署到 Heroku 但不能 因为默认的 sqlite3 服务器仍然存在 检测到 Heroku 不支持 sqlite3 gem https devcenter heroku com articles sqlite3 https d
  • Jython 的 sqlite3 模块

    我正在使用 Java 脚本 API 从我的 Java 应用程序执行一些外部 Python 脚本 python 脚本使用 sqlite3 模块 应用程序的执行导致错误 ImportError No module named sqlite3 当
  • PHP 5 的 SQLite 编译设置是什么?

    SQLite 3 7 附带了新的预写日志记录 WAL http www sqlite org wal html并且有很多设置可以被配置 http www sqlite org compile html 但是 似乎没有任何方法可以改变任何事情
  • sqlite3权限被拒绝android

    我试图直接在 Nexus 上访问我正在开发的应用程序的数据库 但当我尝试执行 sqlite3 命令时 我收到 权限被拒绝 的消息 我还尝试在 root mod 中启动 adb 但再次 设备上的权限被拒绝 我想我必须使用模拟器来做到这一点 但
  • 如何在我的 iOS 项目中添加和执行 .sql 文件?

    我找到了很多关于在 iOS 中使用 SQLite 数据库的教程 但没有找到任何直接引用 sql 文件的内容 谁能告诉我如何将现有的 SQL 数据库链接到我的应用程序 编辑 这是一个 MySQL 转储 我们有一个基于浏览器的抽认卡程序 现在我
  • 从 Core Data、iOS 获取最后插入的项目

    有没有办法获取核心数据数据库中最后插入的项目 这将返回最后插入的对象 setFetchLimit 1 和 setFetchOffset 所有条目数 1
  • Android SQLite 从代码中转储数据库以进行错误报告

    我正在为我的一个 Android 程序开发一种诊断工具 本质上 如果用户遇到问题 我想做一些类似 SQLite 的事情dump 参考 http www sqlite org sqlite html http www sqlite org s
  • 如何在Android中访问现有的sqlite数据库?

    到目前为止 我们已经在 Android 中开发了在运行时创建数据库的应用程序 我们想知道如何在 Android 应用程序中访问预构建或现有的数据库 sqlite 文件 请提供详细信息 查看文档android database sqlite
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库

随机推荐

  • 用于动态创建输入的 jQuery 自动完成

    我在使用 jQuery 自动完成功能和动态创建的输入 再次使用 jQuery 创建 时遇到问题 我无法将自动完成功能绑定到新输入 自动完成 description autocomplete source function request r
  • 有没有办法在应用程序设置中使用字典或 xml?

    我必须在应用程序设置中存储复杂类型 我认为将其存储为 XML 效果最好 问题是我不知道如何存储 XML 我更喜欢将其存储为托管 XML 而不是仅使用必须在每次访问时解析它的原始 XML 字符串 我设法设置了Type设置为 XDocument
  • 如何通过 Google Play 商店链接到 Android 应用程序

    我有一个免费版本的应用程序 我想通过单击应用程序上的购买按钮来链接应用程序商店 我该怎么做 我完全不知道 请帮助我编写一些代码 提前致谢 我所做的是 public void onCreate Bundle savedInstanceStat
  • Swift didSet 获取数组的索引

    假设我有一个数组 var intArray Int 1 2 3 4 5 didSet print index of value that was modified if I do intArray 2 10 里面可以写什么didSet为了打
  • 使用 CPBPressureTouch GestureRecognizer 检测敲击压力强度

    它与一个 UIButton 配合得很好 void viewDidLoad super viewDidLoad CPBPressureTouchGestureRecognizer recognizer CPBPressureTouchGest
  • unload 事件可以用来可靠地触发 ajax 请求吗?

    我需要一种方法来监视用户编辑会话 我正在审查的解决方案之一将让我使用unload发送 ajax 请求以通知服务器编辑会话结束的事件 看 监控用户会话以防止编辑冲突 我的 相当有限的 阅读unload事件表示附加到该处理程序的代码必须快速运行
  • 如何为 React JSX 编写定义文件

    我想为 Summernote jsx 编写一个自定义定义文件 这样我就不会找不到 react summernote 模块 我已经写了 declare var ReactSummernote JSX ElementClass declare
  • Android POST 请求不起作用

    我正在这样做 Override protected Void doInBackground String strings try String query username strings 0 duration strings 1 dist
  • 检查变量是否为空或已填充

    我有以下问题 序言程序 man thomas 2010 man leon 2011 man thomas 2012 man Man once man Man problem man thomas true i want only on tr
  • 如何获取元素的文本节点?

    div class title I am text node a class edit Edit a div 我希望获得 我是文本节点 不希望删除 编辑 标签 并且需要跨浏览器解决方案 var text title contents fil
  • html/php,上传的文件未存储在$_FILES中

    我有一个表单 用户可以在其中提交对象的描述 包括图像 并且有 JavaScript 为 1 对象描述添加一组附加输入 提交表单时 文件信息不会存储在 FILES 中 表单标签是
  • NoClassDefFoundError:android.support.v4.util.ArrayMap

    在 JellyBean 上出现此错误 01 11 18 26 52 030 E AndroidRuntime 16517 FATAL EXCEPTION main 01 11 18 26 52 030 E AndroidRuntime 16
  • Play 框架上公共文件夹外部的资产映射

    我们有大量图像需要存储在外部路径中 即播放应用程序文件夹之外 我们如何才能将其作为资产来播放 以便将其作为网络服务器进行流式传输 你可能已经看过 Play 的有关资产的文档 除了 Play 的标准资产之外 您还可以定义自己的资产 In co
  • 在 Orchard CMS 中使用 Document.cshtml 的替代方案

    我目前正在开发一个需要能够覆盖 document cshtml 文件的网站 以便我可以根据用户的当前位置应用特定的 CSS 类 我尝试使用 URL 替代方案 例如 文档 cshtml 文档 url AreaA cshtml 文档 url A
  • Osmdroid - 更改本地地图文件夹

    我使用的是离线版本的osmdroid 地图放置在sdcard osmdroid中 你知道如何更改文件路径吗 我一直在搜索他们处理 ZIP 文件的代码 但没有找到任何解决方案 以前有人遇到过这个问题吗 Thx 如果你下载了osmdroid的代
  • 计算最接近的首选十进制结果的双精度值

    设 N x 为有效位数最少的十进制数的值 使得 x 是double最接近数字值的值 Given double值 a 和 b 我们如何计算double最接近 N b N a 的值 E g If a and b are the double v
  • Meteor Up 部署失败,但应用程序在开发中运行良好

    我正在测试我的第一个 Meteor 应用程序的部署 并考虑使用 Meteor Up 经过一番折腾后 我设法跑了mup setup没有任何错误 一切看起来都很好 然而 运行mup deploy fails mup deploy Buildin
  • 如何将句子中带括号的单词大写[重复]

    这个问题在这里已经有答案了 我使用以下代码将句子中的每个单词大写 但无法将带有括号的单词大写 PHP代码
  • 如何在基本 R 图中仅将一个图例名称设为斜体?

    我想在情节中添加一个图例 其中只有一个图例名称是斜体的 我在用着plot 在基础 R 中 但是 我需要斜体行来包含变量数字 所以我使用bquote 我尝试过的方法不起作用 a lt 2 b lt 5 plot a b l1 lt bquot
  • 如何在Sqlite中将列值转换为行?

    我在 sqlite 中有一个表值 例如 我在这样的 sqlite 查询中获得价值 select from tablename where id 101 and id 102 and id 1 and id 18 101 Local Loca