MySQL подсчитывает вхождения в новые столбцы - PullRequest
0 голосов
/ 24 октября 2018

возможно сделать запрос для подсчета вхождений в одном столбце и отображения количества вхождений в разных столбцах?

Пример:

+--------+
| Status |
+--------+
| 2      |
+--------+
| 1      |
+--------+
| 2      |
+--------+
| 3      |
+--------+
| 3      |
+--------+
| 2      |
+--------+

требуемый результат

+---------+---------+---------+
| status1 | status2 | status3 |
+---------+---------+---------+
| 1       | 3       | 2       |
+---------+---------+---------+

Я ограничен использованием драйвера VFP ODBC

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Вы пометили вопрос с помощью VFP, mysql и ODBC, поэтому я предполагаю, что вопрос заключается в том, чтобы сделать это в VFP с серверной частью mySQL (поскольку VFP не имеет драйвера ODBC начиная с V6.x).И я бы также подумал, что значения вашего статуса могут быть больше 3, не по порядку с пробелами, может быть, но всего менее 256 (в противном случае, если они были постоянными 1,2,3, вы могли бы просто сделать подсчет (случай, когда ...затем ... конец) как статус1 ... как запрос).

Затем вы можете получить результаты из MySQL с помощью простого запроса, например:

SQLExec(m.lnYourhandle, 'select status, count(*) as counts'+;
   ' from myTable group by status','crsCounts')

Затем скрестите его с простым кодом.Весь код будет выглядеть так:

Local lnHandle, ix

lnHandle=Sqlstringconnect('Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=myDataBase;'+;
    'User=myUsername;Password=myPassword;Option=3;')
SQLExec(m.lnHandle,'select status, Count(*) as counts'+;
    ' from myTable'+;
    ' group by status'+;
    ' order by status','crsCounts')
SQLDisconnect(0)


Local Array laCounts[1], laStruct[Reccount('crsCounts'),4]
* Get ProductId by transforming it to style
* 'StatusXXX' as field name, i as fieldtype, 4, 0 as field length
Select 'Status'+Padl(Status,3,'0'), 'I', 4, 0 ;
    from crsCounts ;
    into Array laStruct

* Get the counts into an array - already ordered by status
Select counts From crsCounts Into Array laCounts
* transpose the array from being [rows,1] to [1,cols]
Dimension laCounts[1, Alen(laCounts,1)]

* create the result cursor using laStructs array and insert data
Create Cursor crsXTabbed From Array laStruct
Insert Into crsXTabbed From Array laCounts
Browse
0 голосов
/ 24 октября 2018

Вы должны действительно обрабатывать связанные с отображением вещи в коде приложенияОднако вы можете использовать условное агрегирование с Group By:

SELECT 
  COUNT(CASE status WHEN 1 THEN status END) AS status1, 
  COUNT(CASE status WHEN 2 THEN status END) AS status2, 
  COUNT(CASE status WHEN 3 THEN status END) AS status3
FROM your_table_name 

DB Fiddle DEMO

...