2021年4月16日金曜日

SQL Server サブクエリにORDER BYやGROUP BYが使えない!?

おはようございます。
こんにちは。
こんばんは。
ドラゴンです。

SQL ServerでサブクエリにORDER BYやGROUP BYを入れて実行すると
エラーになってしまったので、解決策を備忘録として残しておきます。

★今回検証用につかうテーブル★
Aテーブル

No グループID 名前 日付
1 1 太郎 2021/04/01
2 1 二郎 2021/04/02
3 2 三郎 2021/04/03
4 2 四郎 2021/04/04

目次

概要

SELECT
  COUNT(*)
FROM
  (
    SELECT
      グループID
      ,名前
      ,日付
    FROM
      A
    GROUP BY
      グループID
      ,名前
      ,日付
    ORDER BY
      日付
  ) AS A

上のSQLを実行すると、上記の画像のようにエラーが出てしまいました。
え?サブクエリにORDER BYやGROUP BYを入れたらあかんのか・・・

解決策

SELECT
  COUNT(*)
FROM
  (
    SELECT
      グループID
      ,名前
      ,日付
    FROM
      A
    GROUP BY
      グループID
      ,名前
      ,日付
    ORDER BY
      日付
    OFFSET 0 ROWS
  ) AS A

それで、色々調べていくと、
ORDER BYの後ろに「OFFSET 0 ROWS」を入れると、問題なく動くという情報を手に入れたので、
実際に試してみたところ、正常に実行することができましたー!

最後に

過去にOracleを使用していたときは、サブクエリにORDER BYやGROUP BYを入れて実行しても問題にならなかったので、少し戸惑ってしまいましたね...
注意点として「OFFSET 0 ROWS」が使えるのは「SQL Server 2012」からなので、使用する際は「SQL Server」のバージョンを確認しないといけないです。

それでは、ドラゴンでした~~~。

2021年4月11日日曜日

Typora(Markdownエディタ)の紹介①

こんばんは。ひっくです。

今回は「Typora」というMarkdownエディタを紹介したいと思います。

導入の経緯


昨年頃から社内で情報共有をする目的で、調査した結果を簡単にまとめられる

エディタを探していました。

(画像・コードを添付できたり、数式も記載可能※なエディタを求めていました。)

※機械学習に関して調べた内容をまとめるのに、数式を記載する必要があったため。

 

上記要件を満たせそうなエディタとして、Typoraを見つけた次第です。

 

まずはTyporaを導入


公式ページはこちらから。

Typora公式

 

使用している環境に応じてインストーラをダウンロードし、インストールすることで使用可能となります。

URL先で下にスクロールすると、上部に「Download」が表示されます。

Windows、Mac、Linuxのそれぞれに対応しています。

 

Typoraでよく使うショートカット(Windows)


インストールが終了したら、実際に使ってみましょう。

私がTyporaを使用し始めてから、日頃よく使うショートカットの一部を以下に紹介しておきます。

  • 見出しの作成(h1~h6)

    Ctrl + + /

    + 押下毎にh6→h5→h4 と変化していきます。 押下毎は逆にh4→h5→h6となります。


    (表示サンプル)

  • テーブル/表の作成

    Ctrl + T

    押下で次のようなダイアログが表示されます。列、行数を決めてOKを押したら表が作成されます。


    (表示サンプル)

    Ctrl + T

    押下で次のようなダイアログが表示されます。列、行数を決めてOKを押したら表が作成されます。

    表が作成されたら、クリックすることで編集モードとなり、上部のメニューから簡単に

    表のリサイズや文字列の表示位置を変更できます。(以下はMore Actions 選択時)

  • 小見出し

    + 半角Space または Ctrl + Shift + ]

    階層に応じて、小見出しの表示が変わります。

    Tab 押下で自由に階層を変更でき、表示も都度変わります。


    (表示サンプル)

  • 区切り線

    (3回連続入力)

    表示範囲を区切りたい場合に使用します。


    (表示サンプル)


  • 順序付きリスト

    Ctrl + Shift + [

    項目を順番立てで表示したい場合に使用します。


    (表示サンプル)

    1. 手順1
    2. 手順2
    3. 手順3
  • 引用

    Ctrl + Shift + Q


    (表示サンプル)

  • ハイパーリンク

    Ctrl + K

    [] と () のペアが作成されるので、[]内にリンク名称を、()内にリンク先URLを記載します。


    (表示サンプル)

    Typora公式

  • コードブロック

    Ctrl + Shift + K

    コードブロックが作成されたら、右下に「言語を選択」と出るので、言語を入力します。

    後はブロック内にコードを記載するだけです。


    (表示サンプル)

メリット/デメリット


まだ他にも使える機能が存在しますが、長くなりそうなので次回に回そうと思います。

以下にはメリット、デメリットを挙げてみました。

  • メリット

    1. 見やすい資料を時間をかけることなく作成可能になる。

      (過去には手順書等をテキストエディタのみで作成していたこともありましたが、

      図や表、画像、段落分け等見やすさが失われていました。

      最近では作業をしながら手順書を同時にまとめていく、といった使用をしています。)

    2. エクスポートの形式が豊富

      PDF、HTMLの他、Word、OpenOfficeなどにも対応している。

      (Markdownで手順書を作成 → PDFで展開 をよく利用しています。)

    3. 画像管理がしやすい

      ファイル内で使用する画像について、そのファイルに関連する画像のみを

      ドキュメントと同じ階層に配置することが(設定により)可能となる

      (この方法は次回紹介しようと思います。)

    4. ブログも作成できる

      Typoraで編集後、以下手順で「blogger」のエディタに貼り付けて

      今回のブログは作成しました。(画像については別途アップロードしています)

      1. 編集内容を全選択
      2. メニューから、「編集」 → 「HTMLとしてコピー」 の順に選択
      3. 「blogger」のエディタに貼り付け
  • デメリット

    1. (無料でないと絶対にダメという方にとっては)有料化のリスクあり

      現在はβ版ということで、無料で使用できるようですが、今後有料になる可能性も

      あるとのこと。

    2. タグ管理はできない

      ファイル単位での保存となるので、メモを大量に作成する用途では向いていないことも。

      ファイル管理をするためにGitHubを使用する等が必要となる。

Markdownエディタを利用したことがない人は、1回使ってみることをオススメします。

(なお、社内ではVisual Studio Code でMarkdownファイルを編集されている方もいます。

今回はTyporaに絞って紹介しましたが、Visual Studio Codeの方も使い勝手は良さそうです。)

興味のある方は両方使ってみてはどうでしょうか。

 

今回はこのへんで。ではまた!

2021年4月5日月曜日

WPFでマテリアルデザイン

どうも、もりもりです。

WPFでアプリ作ってると、サクっと見た目をキレイにしたいですよね。 そんな時に便利なのが Material Design In XAML Toolkit と MahApps.Metro です。

適用前

まずはマテリアルデザイン適用前だとこんな感じ。 Label、TextBox、ComboBox、CheckBox、RadioButton、Button、ProgressBarを使用してます。

導入

ということで、NuGetで Material Design In XAML Toolkit を入れましょう。

MahApps.Metro も一緒に入るのですが現時点での最新は v2.4.4 なので手動で入れます。

適用

App.xamlにリソースを追加します。

下記のIssueの例をそのまま使います。
https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/issues/1896

App.xaml

<Application x:Class="AsyncSample.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:AsyncSample"
             StartupUri="Views/MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>

            <ResourceDictionary.MergedDictionaries>

                <!--  MahApps  -->
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Violet.xaml" />

                <!--  Material Design  -->
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.LightBlue.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />

                <!--  Material Design: MahApps Compatibility  -->
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.MahApps;component/Themes/MaterialDesignTheme.MahApps.Fonts.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.MahApps;component/Themes/MaterialDesignTheme.MahApps.Flyout.xaml" />

            </ResourceDictionary.MergedDictionaries>

            <!--  MahApps Brushes  -->
            <SolidColorBrush x:Key="MahApps.Brushes.Highlight" Color="{DynamicResource Primary700}" />
            <SolidColorBrush x:Key="MahApps.Brushes.AccentBase" Color="{DynamicResource Primary600}" />
            <SolidColorBrush x:Key="MahApps.Brushes.Accent" Color="{DynamicResource Primary500}" />
            <SolidColorBrush x:Key="MahApps.Brushes.Accent2" Color="{DynamicResource Primary400}" />
            <SolidColorBrush x:Key="MahApps.Brushes.Accent3" Color="{DynamicResource Primary300}" />
            <SolidColorBrush x:Key="MahApps.Brushes.Accent4" Color="{DynamicResource Primary200}" />
            <SolidColorBrush x:Key="MahApps.Brushes.WindowTitle" Color="{DynamicResource Primary700}" />
            <SolidColorBrush x:Key="MahApps.Brushes.Selected.Foreground" Color="{DynamicResource Primary500Foreground}" />
            <LinearGradientBrush x:Key="MahApps.Brushes.Progress" StartPoint="1.002,0.5" EndPoint="0.001,0.5">
                <GradientStop Offset="0" Color="{DynamicResource Primary700}" />
                <GradientStop Offset="1" Color="{DynamicResource Primary300}" />
            </LinearGradientBrush>
            <SolidColorBrush x:Key="MahApps.Brushes.CheckmarkFill" Color="{DynamicResource Primary500}" />
            <SolidColorBrush x:Key="MahApps.Brushes.RightArrowFill" Color="{DynamicResource Primary500}" />
            <SolidColorBrush x:Key="MahApps.Brushes.IdealForeground" Color="{DynamicResource Primary500Foreground}" />
            <SolidColorBrush x:Key="MahApps.Brushes.IdealForegroundDisabled" Color="{DynamicResource Primary500}" Opacity="0.4" />

        </ResourceDictionary>
    </Application.Resources>
</Application>

MainWindow は MetroWindow を継承するよう変更します。

MainWindow.xaml

<mah:MetroWindow x:Class="AsyncSample.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AsyncSample"
        mc:Ignorable="d"
        GlowBrush="{DynamicResource AccentColorBrush}"
        BorderThickness="1"
        Title="MainWindow" Height="550" Width="545" MinHeight="550" MinWidth="545"
        TitleCharacterCasing="Normal">
    <Grid Margin="15">
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="100*"/>
            <RowDefinition Height="46"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100*"/>
        </Grid.ColumnDefinitions>

        <Label Grid.Row="0" Grid.Column="0" Content="処理時間:" Margin="3" HorizontalAlignment="Right"/>
        <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Time}" TextAlignment="Right" Margin="3"/>
        <Label Grid.Row="0" Grid.Column="2" Content="s" VerticalAlignment="Bottom"/>

        <Button Grid.Row="1" Grid.Column="0" Grid.RowSpan="2" Grid.ColumnSpan="2" Name="btnStart" Content="Start" Margin="3" Command="{Binding StartCommand}"/>
        <Button Grid.Row="1" Grid.Column="3" Grid.RowSpan="2" Grid.ColumnSpan="2" Name="btnStop" Content="Stop" Margin="3" Command="{Binding StopCommand}"/>

        <Label Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Name="lblStatus" Content="{Binding Status, Mode=OneWay}" Margin="3"/>
        <Label Grid.Row="3" Grid.Column="4" Name="lblRate" Content="{Binding Rate, Mode=OneWay}" Margin="3" HorizontalAlignment="Right"/>

        <ProgressBar Grid.Row="4" Grid.RowSpan="2" Grid.ColumnSpan="5" Name="progressBar" Value="{Binding Value, Mode=OneWay}" Margin="3"/>

        <StackPanel Grid.Row="9" Grid.Column="0" Grid.ColumnSpan="6">
            <Label Content="Label" />
            <TextBox Text="TextBox" />
            <ComboBox />
            <CheckBox Content="CheckBox"/>
            <RadioButton Content="RadioButton1" GroupName="Group" IsChecked="True"/>
            <RadioButton Content="RadioButton2" GroupName="Group"/>

        </StackPanel>
    </Grid>
</mah:MetroWindow>

MainWindow.xaml.cs も忘れずに。

MainWindow.xaml.cs

using AsyncSample.ViewModels;
using MahApps.Metro.Controls;

namespace AsyncSample.Views
{
    /// 
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow : MetroWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MainViewModel();
        }
    }
}

適用後

実行してみるとこんな感じです。

下記の定義で全体的な色を LightBlue に変えています。

App.xaml

<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.LightBlue.xaml" />

指定できる色は下記で確認できます。
https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/tree/master/MaterialDesignColors.Wpf/Themes/Recommended/Accent

さいごに

自分でイチから作るのは大変なので非常にありがたいですね。

以上、もりもりでした。